From: IOhannes m zmölnig Date: Tue, 18 Feb 2020 08:40:50 +0000 (+0100) Subject: New upstream version 5.4.7~ds0 X-Git-Tag: archive/raspbian/5.4.7_ds0-1+rpi1^2~13^2 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=4099bca9ad0bf865ceddd7a73305943467820713;p=juce.git New upstream version 5.4.7~ds0 --- diff --git a/ChangeList.txt b/ChangeList.txt index 8be14630..867532c2 100644 --- a/ChangeList.txt +++ b/ChangeList.txt @@ -3,6 +3,14 @@ This file just lists the more notable headline features. For more detailed info about minor changes and bugfixes, please see the git log! +Version 5.4.7 + - Fixed a macOS focus bug causing Components to not receive mouse events + - Fixed a potential NullPointerException in the Android IAP code + - Fixed an entitlements file generation bug in the Projucer + - Send VST2 audioMasterUpdateDisplay opcode on the message thread to fix some hosts not updating + - Fixed some build errors and warnings when using Clang on Windows + - Changed the default architecture specified in Linux Makefiles generated by the Projucer + Version 5.4.6 - Fixed compatibility with macOS versions below 10.11 - Multiple thread safety improvements diff --git a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt index c75d3d7c..9f79a9c3 100644 --- a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt +++ b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt @@ -8,7 +8,7 @@ SET(BINARY_NAME "juce_jni") add_library("cpufeatures" STATIC "${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c") set_source_files_properties("${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c" PROPERTIES COMPILE_FLAGS "-Wno-sign-conversion -Wno-gnu-statement-expression") -add_definitions("-DJUCE_ANDROID=1" "-DJUCE_ANDROID_API_VERSION=23" "-DJUCE_PUSH_NOTIFICATIONS=1" "-DJUCE_PUSH_NOTIFICATIONS_ACTIVITY=\"com/roli/juce/JuceActivity\"" "-DJUCE_ANDROID_GL_ES_VERSION_3_0=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_ANDROIDSTUDIO_7F0E4A25=1" "-DJUCE_APP_VERSION=5.4.6" "-DJUCE_APP_VERSION_HEX=0x50406") +add_definitions("-DJUCE_ANDROID=1" "-DJUCE_ANDROID_API_VERSION=23" "-DJUCE_PUSH_NOTIFICATIONS=1" "-DJUCE_PUSH_NOTIFICATIONS_ACTIVITY=\"com/roli/juce/JuceActivity\"" "-DJUCE_ANDROID_GL_ES_VERSION_3_0=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_ANDROIDSTUDIO_7F0E4A25=1" "-DJUCE_APP_VERSION=5.4.7" "-DJUCE_APP_VERSION_HEX=0x50407") include_directories( AFTER "../../../JuceLibraryCode" diff --git a/examples/DemoRunner/Builds/Android/app/src/main/AndroidManifest.xml b/examples/DemoRunner/Builds/Android/app/src/main/AndroidManifest.xml index f577cd8c..e4a88718 100644 --- a/examples/DemoRunner/Builds/Android/app/src/main/AndroidManifest.xml +++ b/examples/DemoRunner/Builds/Android/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ - diff --git a/examples/DemoRunner/Builds/LinuxMakefile/Makefile b/examples/DemoRunner/Builds/LinuxMakefile/Makefile index 56acdc6f..c9d711eb 100644 --- a/examples/DemoRunner/Builds/LinuxMakefile/Makefile +++ b/examples/DemoRunner/Builds/LinuxMakefile/Makefile @@ -32,10 +32,10 @@ ifeq ($(CONFIG),Debug) JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) - TARGET_ARCH := -march=native + TARGET_ARCH := endif - JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCE_DEMO_RUNNER=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.6 -DJUCE_APP_VERSION_HEX=0x50406 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCE_DEMO_RUNNER=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.7 -DJUCE_APP_VERSION_HEX=0x50407 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0 JUCE_TARGET_APP := DemoRunner @@ -53,10 +53,10 @@ ifeq ($(CONFIG),Release) JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) - TARGET_ARCH := -march=native + TARGET_ARCH := endif - JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCE_DEMO_RUNNER=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.6 -DJUCE_APP_VERSION_HEX=0x50406 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCE_DEMO_RUNNER=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.7 -DJUCE_APP_VERSION_HEX=0x50407 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0 JUCE_TARGET_APP := DemoRunner diff --git a/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj b/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj index 2b5ef855..c7c730f1 100644 --- a/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj +++ b/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj @@ -934,8 +934,8 @@ "JUCE_DEMO_RUNNER=1", "JUCE_UNIT_TESTS=1", "JUCER_XCODE_MAC_F6D2F4CF=1", - "JUCE_APP_VERSION=5.4.6", - "JUCE_APP_VERSION_HEX=0x50406", + "JUCE_APP_VERSION=5.4.7", + "JUCE_APP_VERSION_HEX=0x50407", "JucePlugin_Build_VST=0", "JucePlugin_Build_VST3=0", "JucePlugin_Build_AU=0", @@ -980,8 +980,8 @@ "JUCE_DEMO_RUNNER=1", "JUCE_UNIT_TESTS=1", "JUCER_XCODE_MAC_F6D2F4CF=1", - "JUCE_APP_VERSION=5.4.6", - "JUCE_APP_VERSION_HEX=0x50406", + "JUCE_APP_VERSION=5.4.7", + "JUCE_APP_VERSION_HEX=0x50407", "JucePlugin_Build_VST=0", "JucePlugin_Build_VST3=0", "JucePlugin_Build_AU=0", diff --git a/examples/DemoRunner/Builds/MacOSX/Info-App.plist b/examples/DemoRunner/Builds/MacOSX/Info-App.plist index 2c5d4b38..9954cbe5 100644 --- a/examples/DemoRunner/Builds/MacOSX/Info-App.plist +++ b/examples/DemoRunner/Builds/MacOSX/Info-App.plist @@ -22,9 +22,9 @@ CFBundleSignature ???? CFBundleShortVersionString - 5.4.6 + 5.4.7 CFBundleVersion - 5.4.6 + 5.4.7 NSHumanReadableCopyright Copyright (c) 2018 - ROLI Ltd. NSHighResolutionCapable diff --git a/examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj index b0db8d97..2fd74b72 100644 --- a/examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj @@ -64,7 +64,7 @@ Disabled ProgramDatabase ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -106,7 +106,7 @@ Full ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreaded true diff --git a/examples/DemoRunner/Builds/VisualStudio2015/resources.rc b/examples/DemoRunner/Builds/VisualStudio2015/resources.rc index ea054be6..507bdca1 100644 --- a/examples/DemoRunner/Builds/VisualStudio2015/resources.rc +++ b/examples/DemoRunner/Builds/VisualStudio2015/resources.rc @@ -7,7 +7,7 @@ #include VS_VERSION_INFO VERSIONINFO -FILEVERSION 5,4,6,0 +FILEVERSION 5,4,7,0 BEGIN BLOCK "StringFileInfo" BEGIN @@ -16,9 +16,9 @@ BEGIN VALUE "CompanyName", "ROLI Ltd.\0" VALUE "LegalCopyright", "Copyright (c) 2018 - ROLI Ltd.\0" VALUE "FileDescription", "DemoRunner\0" - VALUE "FileVersion", "5.4.6\0" + VALUE "FileVersion", "5.4.7\0" VALUE "ProductName", "DemoRunner\0" - VALUE "ProductVersion", "5.4.6\0" + VALUE "ProductVersion", "5.4.7\0" END END diff --git a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj index 0f6f601f..952d10f7 100644 --- a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj @@ -64,7 +64,7 @@ Disabled ProgramDatabase ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -106,7 +106,7 @@ Full ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreaded true diff --git a/examples/DemoRunner/Builds/VisualStudio2017/resources.rc b/examples/DemoRunner/Builds/VisualStudio2017/resources.rc index ea054be6..507bdca1 100644 --- a/examples/DemoRunner/Builds/VisualStudio2017/resources.rc +++ b/examples/DemoRunner/Builds/VisualStudio2017/resources.rc @@ -7,7 +7,7 @@ #include VS_VERSION_INFO VERSIONINFO -FILEVERSION 5,4,6,0 +FILEVERSION 5,4,7,0 BEGIN BLOCK "StringFileInfo" BEGIN @@ -16,9 +16,9 @@ BEGIN VALUE "CompanyName", "ROLI Ltd.\0" VALUE "LegalCopyright", "Copyright (c) 2018 - ROLI Ltd.\0" VALUE "FileDescription", "DemoRunner\0" - VALUE "FileVersion", "5.4.6\0" + VALUE "FileVersion", "5.4.7\0" VALUE "ProductName", "DemoRunner\0" - VALUE "ProductVersion", "5.4.6\0" + VALUE "ProductVersion", "5.4.7\0" END END diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj index 779d691d..74bb1dbb 100644 --- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj @@ -64,7 +64,7 @@ Disabled ProgramDatabase ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -106,7 +106,7 @@ Full ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreaded true diff --git a/examples/DemoRunner/Builds/VisualStudio2019/resources.rc b/examples/DemoRunner/Builds/VisualStudio2019/resources.rc index ea054be6..507bdca1 100644 --- a/examples/DemoRunner/Builds/VisualStudio2019/resources.rc +++ b/examples/DemoRunner/Builds/VisualStudio2019/resources.rc @@ -7,7 +7,7 @@ #include VS_VERSION_INFO VERSIONINFO -FILEVERSION 5,4,6,0 +FILEVERSION 5,4,7,0 BEGIN BLOCK "StringFileInfo" BEGIN @@ -16,9 +16,9 @@ BEGIN VALUE "CompanyName", "ROLI Ltd.\0" VALUE "LegalCopyright", "Copyright (c) 2018 - ROLI Ltd.\0" VALUE "FileDescription", "DemoRunner\0" - VALUE "FileVersion", "5.4.6\0" + VALUE "FileVersion", "5.4.7\0" VALUE "ProductName", "DemoRunner\0" - VALUE "ProductVersion", "5.4.6\0" + VALUE "ProductVersion", "5.4.7\0" END END diff --git a/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj b/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj index 49d4408e..1a569bd1 100644 --- a/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj +++ b/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj @@ -919,8 +919,8 @@ "JUCE_DEMO_RUNNER=1", "JUCE_UNIT_TESTS=1", "JUCER_XCODE_IPHONE_5BC26AE3=1", - "JUCE_APP_VERSION=5.4.6", - "JUCE_APP_VERSION_HEX=0x50406", + "JUCE_APP_VERSION=5.4.7", + "JUCE_APP_VERSION_HEX=0x50407", "JucePlugin_Build_VST=0", "JucePlugin_Build_VST3=0", "JucePlugin_Build_AU=0", @@ -966,8 +966,8 @@ "JUCE_DEMO_RUNNER=1", "JUCE_UNIT_TESTS=1", "JUCER_XCODE_IPHONE_5BC26AE3=1", - "JUCE_APP_VERSION=5.4.6", - "JUCE_APP_VERSION_HEX=0x50406", + "JUCE_APP_VERSION=5.4.7", + "JUCE_APP_VERSION_HEX=0x50407", "JucePlugin_Build_VST=0", "JucePlugin_Build_VST3=0", "JucePlugin_Build_AU=0", diff --git a/examples/DemoRunner/Builds/iOS/Info-App.plist b/examples/DemoRunner/Builds/iOS/Info-App.plist index 1b8b1b70..f0906a66 100644 --- a/examples/DemoRunner/Builds/iOS/Info-App.plist +++ b/examples/DemoRunner/Builds/iOS/Info-App.plist @@ -30,9 +30,9 @@ CFBundleSignature ???? CFBundleShortVersionString - 5.4.6 + 5.4.7 CFBundleVersion - 5.4.6 + 5.4.7 NSHumanReadableCopyright Copyright (c) 2018 - ROLI Ltd. NSHighResolutionCapable diff --git a/examples/DemoRunner/DemoRunner.jucer b/examples/DemoRunner/DemoRunner.jucer index 56059d32..64eb8169 100644 --- a/examples/DemoRunner/DemoRunner.jucer +++ b/examples/DemoRunner/DemoRunner.jucer @@ -1,9 +1,9 @@ - + companyEmail="info@juce.com" id="yj7xMM" reportAppUsage="0"> diff --git a/examples/DemoRunner/JuceLibraryCode/AppConfig.h b/examples/DemoRunner/JuceLibraryCode/AppConfig.h index 048b13f1..f33cd6f4 100644 --- a/examples/DemoRunner/JuceLibraryCode/AppConfig.h +++ b/examples/DemoRunner/JuceLibraryCode/AppConfig.h @@ -40,14 +40,14 @@ #endif #ifndef JUCE_REPORT_APP_USAGE - #define JUCE_REPORT_APP_USAGE 1 + #define JUCE_REPORT_APP_USAGE 0 #endif // END SECTION A #define JUCE_USE_DARK_SPLASH_SCREEN 1 -#define JUCE_PROJUCER_VERSION 0x50406 +#define JUCE_PROJUCER_VERSION 0x50407 //============================================================================== #define JUCE_MODULE_AVAILABLE_juce_analytics 1 diff --git a/examples/DemoRunner/JuceLibraryCode/JuceHeader.h b/examples/DemoRunner/JuceLibraryCode/JuceHeader.h index 0d632903..4878fe63 100644 --- a/examples/DemoRunner/JuceLibraryCode/JuceHeader.h +++ b/examples/DemoRunner/JuceLibraryCode/JuceHeader.h @@ -56,7 +56,7 @@ namespace ProjectInfo { const char* const projectName = "DemoRunner"; const char* const companyName = "ROLI Ltd."; - const char* const versionString = "5.4.6"; - const int versionNumber = 0x50406; + const char* const versionString = "5.4.7"; + const int versionNumber = 0x50407; } #endif diff --git a/extras/AudioPerformanceTest/AudioPerformanceTest.jucer b/extras/AudioPerformanceTest/AudioPerformanceTest.jucer index 61c0a854..89732ea0 100644 --- a/extras/AudioPerformanceTest/AudioPerformanceTest.jucer +++ b/extras/AudioPerformanceTest/AudioPerformanceTest.jucer @@ -1,7 +1,7 @@ diff --git a/extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile b/extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile index cd2ac907..6e877bd0 100644 --- a/extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile +++ b/extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile @@ -32,7 +32,7 @@ ifeq ($(CONFIG),Debug) JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) - TARGET_ARCH := -march=native + TARGET_ARCH := endif JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) @@ -53,7 +53,7 @@ ifeq ($(CONFIG),Release) JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) - TARGET_ARCH := -march=native + TARGET_ARCH := endif JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) diff --git a/extras/AudioPerformanceTest/JuceLibraryCode/AppConfig.h b/extras/AudioPerformanceTest/JuceLibraryCode/AppConfig.h index c03b022d..140961ca 100644 --- a/extras/AudioPerformanceTest/JuceLibraryCode/AppConfig.h +++ b/extras/AudioPerformanceTest/JuceLibraryCode/AppConfig.h @@ -47,7 +47,7 @@ #define JUCE_USE_DARK_SPLASH_SCREEN 1 -#define JUCE_PROJUCER_VERSION 0x50406 +#define JUCE_PROJUCER_VERSION 0x50407 //============================================================================== #define JUCE_MODULE_AVAILABLE_juce_audio_basics 1 diff --git a/extras/AudioPluginHost/AudioPluginHost.jucer b/extras/AudioPluginHost/AudioPluginHost.jucer index ac227ba1..523a5805 100644 --- a/extras/AudioPluginHost/AudioPluginHost.jucer +++ b/extras/AudioPluginHost/AudioPluginHost.jucer @@ -2,7 +2,7 @@ diff --git a/extras/BinaryBuilder/Builds/LinuxMakefile/Makefile b/extras/BinaryBuilder/Builds/LinuxMakefile/Makefile index 64c5e96d..4ade9f34 100644 --- a/extras/BinaryBuilder/Builds/LinuxMakefile/Makefile +++ b/extras/BinaryBuilder/Builds/LinuxMakefile/Makefile @@ -32,7 +32,7 @@ ifeq ($(CONFIG),Debug) JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) - TARGET_ARCH := -march=native + TARGET_ARCH := endif JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) @@ -53,7 +53,7 @@ ifeq ($(CONFIG),Release) JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) - TARGET_ARCH := -march=native + TARGET_ARCH := endif JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) diff --git a/extras/BinaryBuilder/JuceLibraryCode/AppConfig.h b/extras/BinaryBuilder/JuceLibraryCode/AppConfig.h index 8fcbef4a..88f91e28 100644 --- a/extras/BinaryBuilder/JuceLibraryCode/AppConfig.h +++ b/extras/BinaryBuilder/JuceLibraryCode/AppConfig.h @@ -47,7 +47,7 @@ #define JUCE_USE_DARK_SPLASH_SCREEN 1 -#define JUCE_PROJUCER_VERSION 0x50406 +#define JUCE_PROJUCER_VERSION 0x50407 //============================================================================== #define JUCE_MODULE_AVAILABLE_juce_core 1 diff --git a/extras/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile b/extras/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile index c457c924..18a67b54 100644 --- a/extras/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile +++ b/extras/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile @@ -32,7 +32,7 @@ ifeq ($(CONFIG),Debug) JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) - TARGET_ARCH := -march=native + TARGET_ARCH := endif JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) @@ -53,7 +53,7 @@ ifeq ($(CONFIG),Release) JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) - TARGET_ARCH := -march=native + TARGET_ARCH := endif JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) diff --git a/extras/NetworkGraphicsDemo/JuceLibraryCode/AppConfig.h b/extras/NetworkGraphicsDemo/JuceLibraryCode/AppConfig.h index a5889ec1..8b0ed52b 100644 --- a/extras/NetworkGraphicsDemo/JuceLibraryCode/AppConfig.h +++ b/extras/NetworkGraphicsDemo/JuceLibraryCode/AppConfig.h @@ -47,7 +47,7 @@ #define JUCE_USE_DARK_SPLASH_SCREEN 1 -#define JUCE_PROJUCER_VERSION 0x50406 +#define JUCE_PROJUCER_VERSION 0x50407 //============================================================================== #define JUCE_MODULE_AVAILABLE_juce_audio_basics 1 diff --git a/extras/NetworkGraphicsDemo/NetworkGraphicsDemo.jucer b/extras/NetworkGraphicsDemo/NetworkGraphicsDemo.jucer index 319f8865..f9a08d9e 100644 --- a/extras/NetworkGraphicsDemo/NetworkGraphicsDemo.jucer +++ b/extras/NetworkGraphicsDemo/NetworkGraphicsDemo.jucer @@ -1,7 +1,7 @@ diff --git a/extras/Projucer/Builds/LinuxMakefile/Makefile b/extras/Projucer/Builds/LinuxMakefile/Makefile index b98883b3..65fd56aa 100644 --- a/extras/Projucer/Builds/LinuxMakefile/Makefile +++ b/extras/Projucer/Builds/LinuxMakefile/Makefile @@ -32,10 +32,10 @@ ifeq ($(CONFIG),Debug) JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) - TARGET_ARCH := -march=native + TARGET_ARCH := endif - JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.6 -DJUCE_APP_VERSION_HEX=0x50406 $(shell pkg-config --cflags x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.7 -DJUCE_APP_VERSION_HEX=0x50407 $(shell pkg-config --cflags x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0 JUCE_TARGET_APP := Projucer @@ -53,10 +53,10 @@ ifeq ($(CONFIG),Release) JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) - TARGET_ARCH := -march=native + TARGET_ARCH := endif - JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.6 -DJUCE_APP_VERSION_HEX=0x50406 $(shell pkg-config --cflags x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.7 -DJUCE_APP_VERSION_HEX=0x50407 $(shell pkg-config --cflags x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0 JUCE_TARGET_APP := Projucer diff --git a/extras/Projucer/Builds/MacOSX/Info-App.plist b/extras/Projucer/Builds/MacOSX/Info-App.plist index 6ea5928a..90b42330 100644 --- a/extras/Projucer/Builds/MacOSX/Info-App.plist +++ b/extras/Projucer/Builds/MacOSX/Info-App.plist @@ -3,21 +3,6 @@ - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - NSExceptionDomains - - amazonaws.com - - NSExceptionAllowsInsecureHTTPLoads - - NSIncludesSubdomains - - - - NSMicrophoneUsageDescription This app requires audio input. If you do not have an audio interface connected it will use the built-in microphone. NSCameraUsageDescription @@ -37,9 +22,9 @@ CFBundleSignature ???? CFBundleShortVersionString - 5.4.6 + 5.4.7 CFBundleVersion - 5.4.6 + 5.4.7 NSHumanReadableCopyright ROLI Ltd. NSHighResolutionCapable diff --git a/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj b/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj index 3990ab68..94c16df9 100644 --- a/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj +++ b/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj @@ -3228,8 +3228,8 @@ "_DEBUG=1", "DEBUG=1", "JUCER_XCODE_MAC_F6D2F4CF=1", - "JUCE_APP_VERSION=5.4.6", - "JUCE_APP_VERSION_HEX=0x50406", + "JUCE_APP_VERSION=5.4.7", + "JUCE_APP_VERSION_HEX=0x50407", "JucePlugin_Build_VST=0", "JucePlugin_Build_VST3=0", "JucePlugin_Build_AU=0", @@ -3272,8 +3272,8 @@ "_NDEBUG=1", "NDEBUG=1", "JUCER_XCODE_MAC_F6D2F4CF=1", - "JUCE_APP_VERSION=5.4.6", - "JUCE_APP_VERSION_HEX=0x50406", + "JUCE_APP_VERSION=5.4.7", + "JUCE_APP_VERSION_HEX=0x50407", "JucePlugin_Build_VST=0", "JucePlugin_Build_VST3=0", "JucePlugin_Build_AU=0", diff --git a/extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj index a72d7954..35ce8e3c 100644 --- a/extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj @@ -64,7 +64,7 @@ Disabled ProgramDatabase ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -106,7 +106,7 @@ Full ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreaded true diff --git a/extras/Projucer/Builds/VisualStudio2015/resources.rc b/extras/Projucer/Builds/VisualStudio2015/resources.rc index 0dfcbc7f..3cc301e6 100644 --- a/extras/Projucer/Builds/VisualStudio2015/resources.rc +++ b/extras/Projucer/Builds/VisualStudio2015/resources.rc @@ -7,7 +7,7 @@ #include VS_VERSION_INFO VERSIONINFO -FILEVERSION 5,4,6,0 +FILEVERSION 5,4,7,0 BEGIN BLOCK "StringFileInfo" BEGIN @@ -16,9 +16,9 @@ BEGIN VALUE "CompanyName", "ROLI Ltd.\0" VALUE "LegalCopyright", "ROLI Ltd.\0" VALUE "FileDescription", "Projucer\0" - VALUE "FileVersion", "5.4.6\0" + VALUE "FileVersion", "5.4.7\0" VALUE "ProductName", "Projucer\0" - VALUE "ProductVersion", "5.4.6\0" + VALUE "ProductVersion", "5.4.7\0" END END diff --git a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj index 0bc14790..1bfe1bf0 100644 --- a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj @@ -64,7 +64,7 @@ Disabled ProgramDatabase ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDebug true @@ -106,7 +106,7 @@ Full ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreaded true diff --git a/extras/Projucer/Builds/VisualStudio2017/resources.rc b/extras/Projucer/Builds/VisualStudio2017/resources.rc index 0dfcbc7f..3cc301e6 100644 --- a/extras/Projucer/Builds/VisualStudio2017/resources.rc +++ b/extras/Projucer/Builds/VisualStudio2017/resources.rc @@ -7,7 +7,7 @@ #include VS_VERSION_INFO VERSIONINFO -FILEVERSION 5,4,6,0 +FILEVERSION 5,4,7,0 BEGIN BLOCK "StringFileInfo" BEGIN @@ -16,9 +16,9 @@ BEGIN VALUE "CompanyName", "ROLI Ltd.\0" VALUE "LegalCopyright", "ROLI Ltd.\0" VALUE "FileDescription", "Projucer\0" - VALUE "FileVersion", "5.4.6\0" + VALUE "FileVersion", "5.4.7\0" VALUE "ProductName", "Projucer\0" - VALUE "ProductVersion", "5.4.6\0" + VALUE "ProductVersion", "5.4.7\0" END END diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj index dc49d519..c5a3d25f 100644 --- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj @@ -64,7 +64,7 @@ Disabled ProgramDatabase ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDebug true @@ -106,7 +106,7 @@ Full ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreaded true diff --git a/extras/Projucer/Builds/VisualStudio2019/resources.rc b/extras/Projucer/Builds/VisualStudio2019/resources.rc index 0dfcbc7f..3cc301e6 100644 --- a/extras/Projucer/Builds/VisualStudio2019/resources.rc +++ b/extras/Projucer/Builds/VisualStudio2019/resources.rc @@ -7,7 +7,7 @@ #include VS_VERSION_INFO VERSIONINFO -FILEVERSION 5,4,6,0 +FILEVERSION 5,4,7,0 BEGIN BLOCK "StringFileInfo" BEGIN @@ -16,9 +16,9 @@ BEGIN VALUE "CompanyName", "ROLI Ltd.\0" VALUE "LegalCopyright", "ROLI Ltd.\0" VALUE "FileDescription", "Projucer\0" - VALUE "FileVersion", "5.4.6\0" + VALUE "FileVersion", "5.4.7\0" VALUE "ProductName", "Projucer\0" - VALUE "ProductVersion", "5.4.6\0" + VALUE "ProductVersion", "5.4.7\0" END END diff --git a/extras/Projucer/JuceLibraryCode/AppConfig.h b/extras/Projucer/JuceLibraryCode/AppConfig.h index e9598ed9..cb5a3244 100644 --- a/extras/Projucer/JuceLibraryCode/AppConfig.h +++ b/extras/Projucer/JuceLibraryCode/AppConfig.h @@ -66,7 +66,7 @@ #define JUCE_USE_DARK_SPLASH_SCREEN 1 -#define JUCE_PROJUCER_VERSION 0x50406 +#define JUCE_PROJUCER_VERSION 0x50407 //============================================================================== #define JUCE_MODULE_AVAILABLE_juce_analytics 1 diff --git a/extras/Projucer/JuceLibraryCode/JuceHeader.h b/extras/Projucer/JuceLibraryCode/JuceHeader.h index acb1d2cf..abc5ebe6 100644 --- a/extras/Projucer/JuceLibraryCode/JuceHeader.h +++ b/extras/Projucer/JuceLibraryCode/JuceHeader.h @@ -45,7 +45,7 @@ namespace ProjectInfo { const char* const projectName = "Projucer"; const char* const companyName = "ROLI Ltd."; - const char* const versionString = "5.4.6"; - const int versionNumber = 0x50406; + const char* const versionString = "5.4.7"; + const int versionNumber = 0x50407; } #endif diff --git a/extras/Projucer/Projucer.jucer b/extras/Projucer/Projucer.jucer index 0df45026..4e877daa 100644 --- a/extras/Projucer/Projucer.jucer +++ b/extras/Projucer/Projucer.jucer @@ -1,13 +1,12 @@ diff --git a/extras/Projucer/Source/Application/Windows/jucer_GlobalPathsWindowComponent.h b/extras/Projucer/Source/Application/Windows/jucer_GlobalPathsWindowComponent.h index 4dee4ce7..67eda31d 100644 --- a/extras/Projucer/Source/Application/Windows/jucer_GlobalPathsWindowComponent.h +++ b/extras/Projucer/Source/Application/Windows/jucer_GlobalPathsWindowComponent.h @@ -75,14 +75,8 @@ public: auto juceValue = getAppSettings().getStoredPath (Ids::defaultJuceModulePath, TargetOS::getThisOS()); auto userValue = getAppSettings().getStoredPath (Ids::defaultUserModulePath, TargetOS::getThisOS()); - auto jucePathNeedsScanning = (! juceValue.isUsingDefault() && juceValue.get() != lastJUCEModulePath); - auto userPathNeedsScanning = (! userValue.isUsingDefault() && userValue.get() != lastUserModulePath); - - if (jucePathNeedsScanning) - ProjucerApplication::getApp().rescanJUCEPathModules(); - - if (userPathNeedsScanning) - ProjucerApplication::getApp().rescanUserPathModules(); + if (juceValue.get() != lastJUCEModulePath) ProjucerApplication::getApp().rescanJUCEPathModules(); + if (userValue.get() != lastUserModulePath) ProjucerApplication::getApp().rescanUserPathModules(); } void paint (Graphics& g) override diff --git a/extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineClient.cpp b/extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineClient.cpp index d852991a..fdaa55c4 100644 --- a/extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineClient.cpp +++ b/extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineClient.cpp @@ -256,7 +256,7 @@ public: build.setGlobalDefs (getGlobalDefs()); build.setCompileFlags (project.getCompileEngineSettings().getExtraCompilerFlagsString()); build.setExtraDLLs (getExtraDLLs()); - build.setJuceModulesFolder (EnabledModuleList::findDefaultModulesFolder (project).getFullPathName()); + build.setJuceModulesFolder (project.getEnabledModules().getDefaultModulesFolder().getFullPathName()); build.setUtilsCppInclude (project.getAppIncludeFile().getFullPathName()); @@ -388,10 +388,10 @@ private: { for (auto* m : modules) { - auto localModuleFolder = proj.getEnabledModules().shouldCopyModuleFilesLocally (m->moduleInfo.getID()).getValue() - ? proj.getLocalModuleFolder (m->moduleInfo.getID()) - : m->moduleInfo.getFolder(); + auto copyLocally = proj.getEnabledModules().shouldCopyModuleFilesLocally (m->moduleInfo.getID()); + auto localModuleFolder = copyLocally ? proj.getLocalModuleFolder (m->moduleInfo.getID()) + : m->moduleInfo.getFolder(); m->findAndAddCompiledUnits (*exporter, nullptr, compileUnits, isPluginProject || isVSTHost ? ProjectType::Target::SharedCodeTarget diff --git a/extras/Projucer/Source/Project/UI/Sidebar/jucer_ModuleTreeItems.h b/extras/Projucer/Source/Project/UI/Sidebar/jucer_ModuleTreeItems.h index 7917a4fd..709a23a2 100644 --- a/extras/Projucer/Source/Project/UI/Sidebar/jucer_ModuleTreeItems.h +++ b/extras/Projucer/Source/Project/UI/Sidebar/jucer_ModuleTreeItems.h @@ -153,6 +153,7 @@ private: group.properties.clear(); exporterModulePathDefaultValues.clear(); exporterModulePathValues.clear(); + globalPathValues.clear(); for (Project::ExporterIterator exporter (project); exporter.next();) { @@ -179,34 +180,39 @@ private: "This can be an absolute path, or relative to the jucer project folder, but it " "must be valid on the filesystem of the target machine that will be performing this build. If this " "is empty then the global path will be used."); + + globalPathValues.add (getAppSettings().getStoredPath (isJUCEModule (moduleID) ? Ids::defaultJuceModulePath : Ids::defaultUserModulePath, + exporter->getTargetOSForExporter()).getPropertyAsValue()); } for (int i = 0; i < exporterModulePathDefaultValues.size(); ++i) { exporterModulePathDefaultValues.getReference (i).onDefaultChange = [this] { startTimer (50); }; + exporterModulePathValues.getReference (i).addListener (this); + globalPathValues.getReference (i).addListener (this); } - globalPathValue.removeListener (this); - globalPathValue.referTo (modules.getShouldUseGlobalPathValue (moduleID)); - globalPathValue.addListener (this); + useGlobalPathValue.removeListener (this); + useGlobalPathValue.referTo (modules.shouldUseGlobalPathValue (moduleID)); + useGlobalPathValue.addListener (this); auto menuItemString = (TargetOS::getThisOS() == TargetOS::osx ? "\"Projucer->Global Paths...\"" : "\"File->Global Paths...\""); - props.add (new BooleanPropertyComponent (globalPathValue, + props.add (new BooleanPropertyComponent (useGlobalPathValue, "Use global path", "Use global path for this module"), String ("If this is enabled, then the locally-stored global path (set in the ") + menuItemString + " menu item) " "will be used as the path to this module. " "This means that if this Projucer project is opened on another machine it will use that machine's global path as the path to this module."); - props.add (new BooleanPropertyComponent (modules.shouldCopyModuleFilesLocally (moduleID), + props.add (new BooleanPropertyComponent (modules.shouldCopyModuleFilesLocallyValue (moduleID), "Create local copy", "Copy the module into the project folder"), "If this is enabled, then a local copy of the entire module will be made inside your project (in the auto-generated JuceLibraryFiles folder), " "so that your project will be self-contained, and won't need to contain any references to files in other folders. " "This also means that you can check the module into your source-control system to make sure it is always in sync with your own code."); - props.add (new BooleanPropertyComponent (modules.shouldShowAllModuleFilesInProject (moduleID), + props.add (new BooleanPropertyComponent (modules.shouldShowAllModuleFilesInProjectValue (moduleID), "Add source to project", "Make module files browsable in projects"), "If this is enabled, then the entire source tree from this module will be shown inside your project, " "making it easy to browse/edit the module's classes. If disabled, then only the minimum number of files " @@ -262,8 +268,8 @@ private: //============================================================================== Array exporterModulePathDefaultValues; - Array exporterModulePathValues; - Value globalPathValue; + Array exporterModulePathValues, globalPathValues; + Value useGlobalPathValue; OwnedArray configFlags; @@ -475,7 +481,7 @@ class EnabledModulesItem : public ProjectTreeItemBase, public: EnabledModulesItem (Project& p) : project (p), - moduleListTree (p.getEnabledModules().state) + moduleListTree (project.getEnabledModules().getState()) { moduleListTree.addListener (this); @@ -618,7 +624,7 @@ public: } else if (resultCode > 0) { - std::vector list; + std::vector list; int offset = -1; if (resultCode < 200) diff --git a/extras/Projucer/Source/Project/UI/jucer_ModulesInformationComponent.h b/extras/Projucer/Source/Project/UI/jucer_ModulesInformationComponent.h index 0b2ef9f6..d78f9c02 100644 --- a/extras/Projucer/Source/Project/UI/jucer_ModulesInformationComponent.h +++ b/extras/Projucer/Source/Project/UI/jucer_ModulesInformationComponent.h @@ -35,7 +35,7 @@ class ModulesInformationComponent : public Component, public: ModulesInformationComponent (Project& p) : project (p), - modulesValueTree (p.getEnabledModules().state) + modulesValueTree (project.getEnabledModules().getState()) { listHeader = new ListBoxHeader ( { "Module", "Version", "Make Local Copy", "Paths" }, { 0.25f, 0.2f, 0.2f, 0.35f } ); @@ -135,9 +135,8 @@ public: g.drawFittedText (version, bounds.removeFromLeft (roundToInt (listHeader->getProportionAtIndex (1) * width)), Justification::centredLeft, 1); //============================================================================== - auto copyLocally = project.getEnabledModules().shouldCopyModuleFilesLocally (moduleID).getValue() ? "Yes" : "No"; - - g.drawFittedText (copyLocally, bounds.removeFromLeft (roundToInt (listHeader->getProportionAtIndex (2) * width)), Justification::centredLeft, 1); + g.drawFittedText (String (project.getEnabledModules().shouldCopyModuleFilesLocally (moduleID) ? "Yes" : "No"), + bounds.removeFromLeft (roundToInt (listHeader->getProportionAtIndex (2) * width)), Justification::centredLeft, 1); //============================================================================== String pathText; @@ -215,33 +214,41 @@ private: repaint(); } + static void setLocalCopyModeForAllModules (Project& project, bool copyLocally) + { + auto& modules = project.getEnabledModules(); + + for (auto i = modules.getNumModules(); --i >= 0;) + modules.shouldCopyModuleFilesLocallyValue (modules.getModuleID (i)) = copyLocally; + } + void showCopyModeMenu() { PopupMenu m; m.addItem (PopupMenu::Item ("Set all modules to copy locally") - .setAction ([&] { project.getEnabledModules().setLocalCopyModeForAllModules (true); })); + .setAction ([&] { setLocalCopyModeForAllModules (project, true); })); m.addItem (PopupMenu::Item ("Set all modules to not copy locally") - .setAction ([&] { project.getEnabledModules().setLocalCopyModeForAllModules (false); })); + .setAction ([&] { setLocalCopyModeForAllModules (project, false); })); m.showMenuAsync (PopupMenu::Options().withTargetComponent (setCopyModeButton)); } static void setAllModulesToUseGlobalPaths (Project& project, bool useGlobal) { - auto& moduleList = project.getEnabledModules(); + auto& modules = project.getEnabledModules(); - for (auto id : moduleList.getAllModules()) - moduleList.getShouldUseGlobalPathValue (id).setValue (useGlobal); + for (auto moduleID : modules.getAllModules()) + modules.shouldUseGlobalPathValue (moduleID) = useGlobal; } static void setSelectedModulesToUseGlobalPaths (Project& project, SparseSet selected, bool useGlobal) { - auto& moduleList = project.getEnabledModules(); + auto& modules = project.getEnabledModules(); for (int i = 0; i < selected.size(); ++i) - moduleList.getShouldUseGlobalPathValue (moduleList.getModuleID (selected[i])).setValue (useGlobal); + modules.shouldUseGlobalPathValue (modules.getModuleID (selected[i])) = useGlobal; } void showGlobalPathsMenu() diff --git a/extras/Projucer/Source/Project/jucer_Module.cpp b/extras/Projucer/Source/Project/jucer_Module.cpp index a81d322c..f5ea011b 100644 --- a/extras/Projucer/Source/Project/jucer_Module.cpp +++ b/extras/Projucer/Source/Project/jucer_Module.cpp @@ -40,7 +40,7 @@ File ModuleDescription::getHeader() const { if (moduleFolder != File()) { - const char* extensions[] = { ".h", ".hpp", ".hxx" }; + static const char* extensions[] = { ".h", ".hpp", ".hxx" }; for (auto e : extensions) { @@ -56,14 +56,15 @@ File ModuleDescription::getHeader() const StringArray ModuleDescription::getDependencies() const { - auto deps = StringArray::fromTokens (moduleInfo ["dependencies"].toString(), " \t;,", "\"'"); - deps.trim(); - deps.removeEmptyStrings(); - return deps; + auto moduleDependencies = StringArray::fromTokens (moduleInfo ["dependencies"].toString(), " \t;,", "\"'"); + moduleDependencies.trim(); + moduleDependencies.removeEmptyStrings(); + + return moduleDependencies; } //============================================================================== -static bool tryToAddModuleFromFolder (const File& path, ModuleIDAndFolderList& list) +static bool tryToAddModuleFromFolder (const File& path, AvailableModuleList::ModuleIDAndFolderList& list) { ModuleDescription m (path); @@ -76,7 +77,7 @@ static bool tryToAddModuleFromFolder (const File& path, ModuleIDAndFolderList& l return false; } -static void addAllModulesInSubfoldersRecursively (const File& path, int depth, ModuleIDAndFolderList& list) +static void addAllModulesInSubfoldersRecursively (const File& path, int depth, AvailableModuleList::ModuleIDAndFolderList& list) { if (depth > 0) { @@ -94,27 +95,19 @@ static void addAllModulesInSubfoldersRecursively (const File& path, int depth, M } } -static void addAllModulesInFolder (const File& path, ModuleIDAndFolderList& list) +static void addAllModulesInFolder (const File& path, AvailableModuleList::ModuleIDAndFolderList& list) { if (! tryToAddModuleFromFolder (path, list)) { - int subfolders = 3; + static constexpr int subfolders = 3; addAllModulesInSubfoldersRecursively (path, subfolders, list); } } -static void sort (ModuleIDAndFolderList& listToSort) -{ - std::sort (listToSort.begin(), listToSort.end(), [] (const ModuleIDAndFolder& m1, const ModuleIDAndFolder& m2) - { - return m1.first.compareIgnoreCase (m2.first) < 0; - }); -} - -//============================================================================== -struct ModuleScannerJob : public ThreadPoolJob +struct ModuleScannerJob : public ThreadPoolJob { - ModuleScannerJob (const Array& paths, std::function&& callback) + ModuleScannerJob (const Array& paths, + std::function&& callback) : ThreadPoolJob ("ModuleScannerJob"), pathsToScan (paths), completionCallback (std::move (callback)) @@ -123,14 +116,19 @@ struct ModuleScannerJob : public ThreadPoolJob JobStatus runJob() override { - ModuleIDAndFolderList list; + AvailableModuleList::ModuleIDAndFolderList list; for (auto& p : pathsToScan) addAllModulesInFolder (p, list); if (! shouldExit()) { - sort (list); + std::sort (list.begin(), list.end(), [] (const AvailableModuleList::ModuleIDAndFolder& m1, + const AvailableModuleList::ModuleIDAndFolder& m2) + { + return m1.first.compareIgnoreCase (m2.first) < 0; + }); + completionCallback (list); } @@ -138,16 +136,12 @@ struct ModuleScannerJob : public ThreadPoolJob } Array pathsToScan; - std::function completionCallback; + std::function completionCallback; }; -AvailableModuleList::AvailableModuleList() -{ -} - ThreadPoolJob* AvailableModuleList::createScannerJob (const Array& paths) { - return new ModuleScannerJob (paths, [this] (ModuleIDAndFolderList scannedModuleList) + return new ModuleScannerJob (paths, [this] (AvailableModuleList::ModuleIDAndFolderList scannedModuleList) { { const ScopedLock swapLock (lock); @@ -177,14 +171,13 @@ void AvailableModuleList::scanPathsAsync (const Array& paths) removePendingAndAddJob (createScannerJob (paths)); } -ModuleIDAndFolderList AvailableModuleList::getAllModules() const +AvailableModuleList::ModuleIDAndFolderList AvailableModuleList::getAllModules() const { const ScopedLock readLock (lock); - return moduleList; } -ModuleIDAndFolder AvailableModuleList::getModuleWithID (const String& id) const +AvailableModuleList::ModuleIDAndFolder AvailableModuleList::getModuleWithID (const String& id) const { const ScopedLock readLock (lock); @@ -214,19 +207,18 @@ LibraryModule::LibraryModule (const ModuleDescription& d) { } -//============================================================================== void LibraryModule::writeIncludes (ProjectSaver& projectSaver, OutputStream& out) { auto& project = projectSaver.project; auto& modules = project.getEnabledModules(); - auto id = getID(); + auto moduleID = getID(); - if (modules.shouldCopyModuleFilesLocally (id).getValue()) + if (modules.shouldCopyModuleFilesLocally (moduleID)) { auto juceModuleFolder = moduleInfo.getFolder(); - auto localModuleFolder = project.getLocalModuleFolder (id); + auto localModuleFolder = project.getLocalModuleFolder (moduleID); localModuleFolder.createDirectory(); projectSaver.copyFolder (juceModuleFolder, localModuleFolder); } @@ -236,23 +228,14 @@ void LibraryModule::writeIncludes (ProjectSaver& projectSaver, OutputStream& out << ">" << newLine; } -//============================================================================== -static void parseAndAddLibs (StringArray& libList, const String& libs) -{ - libList.addTokens (libs, ", ", {}); - libList.trim(); - libList.removeDuplicates (false); -} - -void LibraryModule::addSettingsForModuleToExporter (ProjectExporter& exporter, ProjectSaver& projectSaver) const +void LibraryModule::addSearchPathsToExporter (ProjectExporter& exporter) const { - auto& project = exporter.getProject(); - auto moduleRelativePath = exporter.getModuleFolderRelativeToProject (getID()); exporter.addToExtraSearchPaths (moduleRelativePath.getParentDirectory()); String libDirPlatform; + if (exporter.isLinux()) libDirPlatform = "Linux"; else if (exporter.isCodeBlocks() && exporter.isWindows()) @@ -261,7 +244,7 @@ void LibraryModule::addSettingsForModuleToExporter (ProjectExporter& exporter, P libDirPlatform = exporter.getTargetFolder().getFileName(); auto libSubdirPath = moduleRelativePath.toUnixStyle() + "/libs/" + libDirPlatform; - auto moduleLibDir = File (project.getProjectFolder().getFullPathName() + "/" + libSubdirPath); + auto moduleLibDir = File (exporter.getProject().getProjectFolder().getFullPathName() + "/" + libSubdirPath); if (moduleLibDir.exists()) exporter.addToModuleLibPaths ({ libSubdirPath, moduleRelativePath.getRoot() }); @@ -275,27 +258,43 @@ void LibraryModule::addSettingsForModuleToExporter (ProjectExporter& exporter, P for (auto& path : paths) exporter.addToExtraSearchPaths (moduleRelativePath.getChildFile (path.unquoted())); } +} - { - auto extraDefs = moduleInfo.getPreprocessorDefs().trim(); +void LibraryModule::addDefinesToExporter (ProjectExporter& exporter) const +{ + auto extraDefs = moduleInfo.getPreprocessorDefs().trim(); - if (extraDefs.isNotEmpty()) - exporter.getExporterPreprocessorDefsValue() = exporter.getExporterPreprocessorDefsString() + "\n" + extraDefs; - } + if (extraDefs.isNotEmpty()) + exporter.getExporterPreprocessorDefsValue() = exporter.getExporterPreprocessorDefsString() + "\n" + extraDefs; +} - { - Array compiled; - auto& modules = project.getEnabledModules(); - auto id = getID(); +void LibraryModule::addCompileUnitsToExporter (ProjectExporter& exporter, ProjectSaver& projectSaver) const +{ + auto& project = exporter.getProject(); + auto& modules = project.getEnabledModules(); - auto localModuleFolder = modules.shouldCopyModuleFilesLocally (id).getValue() ? project.getLocalModuleFolder (id) - : moduleInfo.getFolder(); + auto moduleID = getID(); - findAndAddCompiledUnits (exporter, &projectSaver, compiled); + auto localModuleFolder = modules.shouldCopyModuleFilesLocally (moduleID) ? project.getLocalModuleFolder (moduleID) + : moduleInfo.getFolder(); - if (modules.shouldShowAllModuleFilesInProject (id).getValue()) - addBrowseableCode (exporter, compiled, localModuleFolder); - } + Array compiled; + findAndAddCompiledUnits (exporter, &projectSaver, compiled); + + if (modules.shouldShowAllModuleFilesInProject (moduleID)) + addBrowseableCode (exporter, compiled, localModuleFolder); +} + +void LibraryModule::addLibsToExporter (ProjectExporter& exporter) const +{ + auto parseAndAddLibsToList = [] (StringArray& libList, const String& libs) + { + libList.addTokens (libs, ", ", {}); + libList.trim(); + libList.removeDuplicates (false); + }; + + auto& project = exporter.getProject(); if (exporter.isXcode()) { @@ -312,26 +311,34 @@ void LibraryModule::addSettingsForModuleToExporter (ProjectExporter& exporter, P auto frameworks = moduleInfo.moduleInfo [xcodeExporter.isOSX() ? "OSXFrameworks" : "iOSFrameworks"].toString(); xcodeExporter.xcodeFrameworks.addTokens (frameworks, ", ", {}); - parseAndAddLibs (xcodeExporter.xcodeLibs, moduleInfo.moduleInfo [exporter.isOSX() ? "OSXLibs" : "iOSLibs"].toString()); + parseAndAddLibsToList (xcodeExporter.xcodeLibs, moduleInfo.moduleInfo [exporter.isOSX() ? "OSXLibs" : "iOSLibs"].toString()); } else if (exporter.isLinux()) { - parseAndAddLibs (exporter.linuxLibs, moduleInfo.moduleInfo ["linuxLibs"].toString()); - parseAndAddLibs (exporter.linuxPackages, moduleInfo.moduleInfo ["linuxPackages"].toString()); + parseAndAddLibsToList (exporter.linuxLibs, moduleInfo.moduleInfo ["linuxLibs"].toString()); + parseAndAddLibsToList (exporter.linuxPackages, moduleInfo.moduleInfo ["linuxPackages"].toString()); } else if (exporter.isWindows()) { if (exporter.isCodeBlocks()) - parseAndAddLibs (exporter.mingwLibs, moduleInfo.moduleInfo ["mingwLibs"].toString()); + parseAndAddLibsToList (exporter.mingwLibs, moduleInfo.moduleInfo ["mingwLibs"].toString()); else - parseAndAddLibs (exporter.windowsLibs, moduleInfo.moduleInfo ["windowsLibs"].toString()); + parseAndAddLibsToList (exporter.windowsLibs, moduleInfo.moduleInfo ["windowsLibs"].toString()); } else if (exporter.isAndroid()) { - parseAndAddLibs (exporter.androidLibs, moduleInfo.moduleInfo ["androidLibs"].toString()); + parseAndAddLibsToList (exporter.androidLibs, moduleInfo.moduleInfo ["androidLibs"].toString()); } } +void LibraryModule::addSettingsForModuleToExporter (ProjectExporter& exporter, ProjectSaver& projectSaver) const +{ + addSearchPathsToExporter (exporter); + addDefinesToExporter (exporter); + addCompileUnitsToExporter (exporter, projectSaver); + addLibsToExporter (exporter); +} + void LibraryModule::getConfigFlags (Project& project, OwnedArray& flags) const { auto header = moduleInfo.getHeader(); @@ -384,7 +391,25 @@ void LibraryModule::getConfigFlags (Project& project, OwnedArray= 0) + { + auto topLevelGroup = path.substring (0, slash); + auto remainingPath = path.substring (slash + 1); + + auto newGroup = group.getOrCreateSubGroup (topLevelGroup); + addFileWithGroups (newGroup, file, remainingPath); + } + else + { + if (! group.containsChildForFile (file)) + group.addRelativeFile (file, -1, false); + } +} + struct FileSorter { static int compareElements (const File& f1, const File& f2) @@ -393,16 +418,19 @@ struct FileSorter } }; -bool LibraryModule::CompileUnit::hasSuffix (const File& f, const char* suffix) +void LibraryModule::findBrowseableFiles (const File& folder, Array& filesFound) const { - auto fileWithoutSuffix = f.getFileNameWithoutExtension() + "."; + Array tempList; + FileSorter sorter; - return fileWithoutSuffix.containsIgnoreCase (suffix + String (".")) - || fileWithoutSuffix.containsIgnoreCase (suffix + String ("_")); -} + DirectoryIterator iter (folder, true, "*", File::findFiles); + bool isHiddenFile; -void LibraryModule::CompileUnit::writeInclude (MemoryOutputStream&) const -{ + while (iter.next (nullptr, &isHiddenFile, nullptr, nullptr, nullptr, nullptr)) + if (! isHiddenFile && iter.getFile().hasFileExtension (browseableFileExtensions)) + tempList.addSorted (sorter, iter.getFile()); + + filesFound.addArray (tempList); } bool LibraryModule::CompileUnit::isNeededForExporter (ProjectExporter& exporter) const @@ -428,6 +456,14 @@ String LibraryModule::CompileUnit::getFilenameForProxyFile() const return "include_" + file.getFileName(); } +bool LibraryModule::CompileUnit::hasSuffix (const File& f, const char* suffix) +{ + auto fileWithoutSuffix = f.getFileNameWithoutExtension() + "."; + + return fileWithoutSuffix.containsIgnoreCase (suffix + String (".")) + || fileWithoutSuffix.containsIgnoreCase (suffix + String ("_")); +} + Array LibraryModule::getAllCompileUnits (ProjectType::Target::Type forTarget) const { auto files = getFolder().findChildFiles (File::findFiles, false); @@ -486,40 +522,6 @@ void LibraryModule::findAndAddCompiledUnits (ProjectExporter& exporter, } } -static void addFileWithGroups (Project::Item& group, const RelativePath& file, const String& path) -{ - auto slash = path.indexOfChar (File::getSeparatorChar()); - - if (slash >= 0) - { - auto topLevelGroup = path.substring (0, slash); - auto remainingPath = path.substring (slash + 1); - - auto newGroup = group.getOrCreateSubGroup (topLevelGroup); - addFileWithGroups (newGroup, file, remainingPath); - } - else - { - if (! group.containsChildForFile (file)) - group.addRelativeFile (file, -1, false); - } -} - -void LibraryModule::findBrowseableFiles (const File& folder, Array& filesFound) const -{ - Array tempList; - FileSorter sorter; - - DirectoryIterator iter (folder, true, "*", File::findFiles); - bool isHiddenFile; - - while (iter.next (nullptr, &isHiddenFile, nullptr, nullptr, nullptr, nullptr)) - if (! isHiddenFile && iter.getFile().hasFileExtension (browseableFileExtensions)) - tempList.addSorted (sorter, iter.getFile()); - - filesFound.addArray (tempList); -} - void LibraryModule::addBrowseableCode (ProjectExporter& exporter, const Array& compiled, const File& localModuleFolder) const { if (sourceFiles.isEmpty()) @@ -531,7 +533,7 @@ void LibraryModule::addBrowseableCode (ProjectExporter& exporter, const Array (state.getChildWithProperty (Ids::ID, moduleID) - .getProperty (Ids::useGlobalPath)); -} + for (int i = 0; i < getNumModules(); ++i) + moduleIDs.add (getModuleID (i)); -Value EnabledModuleList::getShouldUseGlobalPathValue (const String& moduleID) const -{ - return state.getChildWithProperty (Ids::ID, moduleID) - .getPropertyAsValue (Ids::useGlobalPath, getUndoManager()); + return moduleIDs; } -Value EnabledModuleList::shouldShowAllModuleFilesInProject (const String& moduleID) +void EnabledModuleList::createRequiredModules (OwnedArray& modules) { - return state.getChildWithProperty (Ids::ID, moduleID) - .getPropertyAsValue (Ids::showAllCode, getUndoManager()); + for (int i = 0; i < getNumModules(); ++i) + modules.add (new LibraryModule (getModuleInfo (getModuleID (i)))); } -struct ModuleTreeSorter +void EnabledModuleList::sortAlphabetically() { - static int compareElements (const ValueTree& m1, const ValueTree& m2) + struct ModuleTreeSorter { - return m1[Ids::ID].toString().compareIgnoreCase (m2[Ids::ID]); - } -}; + static int compareElements (const ValueTree& m1, const ValueTree& m2) + { + return m1[Ids::ID].toString().compareIgnoreCase (m2[Ids::ID]); + } + }; -void EnabledModuleList::sortAlphabetically() -{ ModuleTreeSorter sorter; state.sort (sorter, getUndoManager(), false); } -Value EnabledModuleList::shouldCopyModuleFilesLocally (const String& moduleID) const +File EnabledModuleList::getDefaultModulesFolder() const { - return state.getChildWithProperty (Ids::ID, moduleID) - .getPropertyAsValue (Ids::useLocalCopy, getUndoManager()); -} + File globalPath (getAppSettings().getStoredPath (Ids::defaultJuceModulePath, TargetOS::getThisOS()).get().toString()); -void EnabledModuleList::addModule (const File& moduleFolder, bool copyLocally, bool useGlobalPath, bool sendAnalyticsEvent) -{ - ModuleDescription info (moduleFolder); + if (globalPath.exists()) + return globalPath; - if (info.isValid()) + for (auto& exporterPathModule : project.getExporterPathsModuleList().getAllModules()) { - auto moduleID = info.getID(); - - if (! isModuleEnabled (moduleID)) - { - ValueTree module (Ids::MODULE); - module.setProperty (Ids::ID, moduleID, getUndoManager()); - - state.appendChild (module, getUndoManager()); - sortAlphabetically(); - - shouldShowAllModuleFilesInProject (moduleID) = true; - shouldCopyModuleFilesLocally (moduleID) = copyLocally; - getShouldUseGlobalPathValue (moduleID) = useGlobalPath; - - RelativePath path (moduleFolder.getParentDirectory(), - project.getProjectFolder(), RelativePath::projectFolder); - - for (Project::ExporterIterator exporter (project); exporter.next();) - exporter->getPathForModuleValue (moduleID) = path.toUnixStyle(); - - if (! useGlobalPath) - project.rescanExporterPathModules (false); - - if (sendAnalyticsEvent) - { - StringPairArray data; - data.set ("label", moduleID); + auto f = exporterPathModule.second; - Analytics::getInstance()->logEvent ("Module Added", data, ProjucerAnalyticsEvent::projectEvent); - } - } + if (f.isDirectory()) + return f.getParentDirectory(); } -} - -void EnabledModuleList::removeModule (String moduleID) // must be pass-by-value, and not a const ref! -{ - for (auto i = state.getNumChildren(); --i >= 0;) - if (state.getChild(i) [Ids::ID] == moduleID) - state.removeChild (i, getUndoManager()); - for (Project::ExporterIterator exporter (project); exporter.next();) - exporter->removePathForModule (moduleID); + return File::getCurrentWorkingDirectory(); } -void EnabledModuleList::createRequiredModules (OwnedArray& modules) +ModuleDescription EnabledModuleList::getModuleInfo (const String& moduleID) { - for (int i = 0; i < getNumModules(); ++i) - modules.add (new LibraryModule (getModuleInfo (getModuleID (i)))); + return ModuleDescription (project.getModuleWithID (moduleID).second); } -StringArray EnabledModuleList::getAllModules() const +bool EnabledModuleList::isModuleEnabled (const String& moduleID) const { - StringArray moduleIDs; - - for (int i = 0; i < getNumModules(); ++i) - moduleIDs.add (getModuleID (i)); - - return moduleIDs; + return state.getChildWithProperty (Ids::ID, moduleID).isValid(); } static void getDependencies (Project& project, const String& moduleID, StringArray& dependencies) @@ -717,6 +656,39 @@ bool EnabledModuleList::doesModuleHaveHigherCppStandardThanProject (const String return (moduleCppStandard.getIntValue() > projectCppStandard.getIntValue()); } +bool EnabledModuleList::shouldUseGlobalPath (const String& moduleID) const +{ + return (bool) shouldUseGlobalPathValue (moduleID).getValue(); +} + +Value EnabledModuleList::shouldUseGlobalPathValue (const String& moduleID) const +{ + return state.getChildWithProperty (Ids::ID, moduleID) + .getPropertyAsValue (Ids::useGlobalPath, getUndoManager()); +} + +bool EnabledModuleList::shouldShowAllModuleFilesInProject (const String& moduleID) const +{ + return (bool) shouldShowAllModuleFilesInProjectValue (moduleID).getValue(); +} + +Value EnabledModuleList::shouldShowAllModuleFilesInProjectValue (const String& moduleID) const +{ + return state.getChildWithProperty (Ids::ID, moduleID) + .getPropertyAsValue (Ids::showAllCode, getUndoManager()); +} + +bool EnabledModuleList::shouldCopyModuleFilesLocally (const String& moduleID) const +{ + return (bool) shouldCopyModuleFilesLocallyValue (moduleID).getValue(); +} + +Value EnabledModuleList::shouldCopyModuleFilesLocallyValue (const String& moduleID) const +{ + return state.getChildWithProperty (Ids::ID, moduleID) + .getPropertyAsValue (Ids::useLocalCopy, getUndoManager()); +} + bool EnabledModuleList::areMostModulesUsingGlobalPath() const { int numYes = 0, numNo = 0; @@ -738,7 +710,7 @@ bool EnabledModuleList::areMostModulesCopiedLocally() const for (auto i = getNumModules(); --i >= 0;) { - if (shouldCopyModuleFilesLocally (getModuleID (i)).getValue()) + if (shouldCopyModuleFilesLocally (getModuleID (i))) ++numYes; else ++numNo; @@ -747,40 +719,43 @@ bool EnabledModuleList::areMostModulesCopiedLocally() const return numYes > numNo; } -void EnabledModuleList::setLocalCopyModeForAllModules (bool copyLocally) +void EnabledModuleList::addModule (const File& moduleFolder, bool copyLocally, bool useGlobalPath, bool sendAnalyticsEvent) { - for (auto i = getNumModules(); --i >= 0;) - shouldCopyModuleFilesLocally (project.getEnabledModules().getModuleID (i)) = copyLocally; -} + ModuleDescription info (moduleFolder); -File EnabledModuleList::findDefaultModulesFolder (Project& project) -{ - File globalPath (getAppSettings().getStoredPath (Ids::defaultJuceModulePath, TargetOS::getThisOS()).get().toString()); + if (info.isValid()) + { + auto moduleID = info.getID(); - if (globalPath.exists()) - return globalPath; + if (! isModuleEnabled (moduleID)) + { + ValueTree module (Ids::MODULE); + module.setProperty (Ids::ID, moduleID, getUndoManager()); - for (auto& exporterPathModule : project.getExporterPathsModuleList().getAllModules()) - { - auto f = exporterPathModule.second; + state.appendChild (module, getUndoManager()); + sortAlphabetically(); - if (f.isDirectory()) - return f.getParentDirectory(); - } + shouldShowAllModuleFilesInProjectValue (moduleID) = true; + shouldCopyModuleFilesLocallyValue (moduleID) = copyLocally; + shouldUseGlobalPathValue (moduleID) = useGlobalPath; - return File::getCurrentWorkingDirectory(); -} + RelativePath path (moduleFolder.getParentDirectory(), + project.getProjectFolder(), RelativePath::projectFolder); -void EnabledModuleList::addModuleFromUserSelectedFile() -{ - static auto lastLocation = findDefaultModulesFolder (project); + for (Project::ExporterIterator exporter (project); exporter.next();) + exporter->getPathForModuleValue (moduleID) = path.toUnixStyle(); - FileChooser fc ("Select a module to add...", lastLocation, {}); + if (! useGlobalPath) + project.rescanExporterPathModules (false); - if (fc.browseForDirectory()) - { - lastLocation = fc.getResult(); - addModuleOfferingToCopy (lastLocation, true); + if (sendAnalyticsEvent) + { + StringPairArray data; + data.set ("label", moduleID); + + Analytics::getInstance()->logEvent ("Module Added", data, ProjucerAnalyticsEvent::projectEvent); + } + } } } @@ -797,6 +772,19 @@ void EnabledModuleList::addModuleInteractive (const String& moduleID) addModuleFromUserSelectedFile(); } +void EnabledModuleList::addModuleFromUserSelectedFile() +{ + auto lastLocation = getDefaultModulesFolder(); + + FileChooser fc ("Select a module to add...", lastLocation, {}); + + if (fc.browseForDirectory()) + { + lastLocation = fc.getResult(); + addModuleOfferingToCopy (lastLocation, true); + } +} + void EnabledModuleList::addModuleOfferingToCopy (const File& f, bool isFromUserSpecifiedFolder) { ModuleDescription m (f); @@ -820,12 +808,12 @@ void EnabledModuleList::addModuleOfferingToCopy (const File& f, bool isFromUserS true); } -bool isJUCEFolder (const File& f) +void EnabledModuleList::removeModule (String moduleID) // must be pass-by-value, and not a const ref! { - return isJUCEModulesFolder (f.getChildFile ("modules")); -} + for (auto i = state.getNumChildren(); --i >= 0;) + if (state.getChild(i) [Ids::ID] == moduleID) + state.removeChild (i, getUndoManager()); -bool isJUCEModulesFolder (const File& f) -{ - return f.isDirectory() && f.getChildFile ("juce_core").isDirectory(); + for (Project::ExporterIterator exporter (project); exporter.next();) + exporter->removePathForModule (moduleID); } diff --git a/extras/Projucer/Source/Project/jucer_Module.h b/extras/Projucer/Source/Project/jucer_Module.h index ba216b33..66b986f0 100644 --- a/extras/Projucer/Source/Project/jucer_Module.h +++ b/extras/Projucer/Source/Project/jucer_Module.h @@ -30,16 +30,11 @@ class ProjectExporter; class ProjectSaver; -//============================================================================== -bool isJUCEModulesFolder (const File&); -bool isJUCEFolder (const File&); - //============================================================================== struct ModuleDescription { - ModuleDescription() {} + ModuleDescription() = default; ModuleDescription (const File& folder); - ModuleDescription (const var& info) : moduleInfo (info) {} bool isValid() const { return getID().isNotEmpty(); } @@ -57,8 +52,6 @@ struct ModuleDescription File getFolder() const { jassert (moduleFolder != File()); return moduleFolder; } File getHeader() const; - bool isPluginClient() const { return getID() == "juce_audio_plugin_client"; } - File moduleFolder; var moduleInfo; URL url; @@ -91,7 +84,6 @@ public: File file; bool isCompiledForObjC, isCompiledForNonObjC; - void writeInclude (MemoryOutputStream&) const; bool isNeededForExporter (ProjectExporter&) const; String getFilenameForProxyFile() const; static bool hasSuffix (const File&, const char*); @@ -104,20 +96,25 @@ public: ModuleDescription moduleInfo; private: - mutable Array sourceFiles; - OwnedArray configFlags; + void addSearchPathsToExporter (ProjectExporter&) const; + void addDefinesToExporter (ProjectExporter&) const; + void addCompileUnitsToExporter (ProjectExporter&, ProjectSaver&) const; + void addLibsToExporter (ProjectExporter&) const; void addBrowseableCode (ProjectExporter&, const Array& compiled, const File& localModuleFolder) const; + + mutable Array sourceFiles; + OwnedArray configFlags; }; //============================================================================== -using ModuleIDAndFolder = std::pair; -using ModuleIDAndFolderList = std::vector; - class AvailableModuleList { public: - AvailableModuleList(); + using ModuleIDAndFolder = std::pair; + using ModuleIDAndFolderList = std::vector; + + AvailableModuleList() = default; void scanPaths (const Array&); void scanPathsAsync (const Array&); @@ -157,46 +154,49 @@ class EnabledModuleList public: EnabledModuleList (Project&, const ValueTree&); - static File findDefaultModulesFolder (Project&); - - bool isModuleEnabled (const String& moduleID) const; + //============================================================================== + ValueTree getState() const { return state; } - bool shouldUseGlobalPath (const String& moduleID) const; - Value getShouldUseGlobalPathValue (const String& moduleID) const; + StringArray getAllModules() const; + void createRequiredModules (OwnedArray& modules); + void sortAlphabetically(); - Value shouldShowAllModuleFilesInProject (const String& moduleID); - Value shouldCopyModuleFilesLocally (const String& moduleID) const; + File getDefaultModulesFolder() const; - void removeModule (String moduleID); - bool isAudioPluginModuleMissing() const; + int getNumModules() const { return state.getNumChildren(); } + String getModuleID (int index) const { return state.getChild (index) [Ids::ID].toString(); } ModuleDescription getModuleInfo (const String& moduleID); - void addModule (const File& moduleManifestFile, bool copyLocally, bool useGlobalPath, bool sendAnalyticsEvent); - void addModuleInteractive (const String& moduleID); - void addModuleFromUserSelectedFile(); - void addModuleOfferingToCopy (const File&, bool isFromUserSpecifiedFolder); - - StringArray getAllModules() const; + bool isModuleEnabled (const String& moduleID) const; StringArray getExtraDependenciesNeeded (const String& moduleID) const; bool doesModuleHaveHigherCppStandardThanProject (const String& moduleID); - void createRequiredModules (OwnedArray& modules); - int getNumModules() const { return state.getNumChildren(); } - String getModuleID (int index) const { return state.getChild (index) [Ids::ID].toString(); } + bool shouldUseGlobalPath (const String& moduleID) const; + Value shouldUseGlobalPathValue (const String& moduleID) const; + + bool shouldShowAllModuleFilesInProject (const String& moduleID) const; + Value shouldShowAllModuleFilesInProjectValue (const String& moduleID) const; + + bool shouldCopyModuleFilesLocally (const String& moduleID) const; + Value shouldCopyModuleFilesLocallyValue (const String& moduleID) const; bool areMostModulesUsingGlobalPath() const; bool areMostModulesCopiedLocally() const; - void setLocalCopyModeForAllModules (bool copyLocally); - - void sortAlphabetically(); + //============================================================================== + void addModule (const File& moduleManifestFile, bool copyLocally, bool useGlobalPath, bool sendAnalyticsEvent); + void addModuleInteractive (const String& moduleID); + void addModuleFromUserSelectedFile(); + void addModuleOfferingToCopy (const File&, bool isFromUserSpecifiedFolder); - Project& project; - ValueTree state; + void removeModule (String moduleID); private: UndoManager* getUndoManager() const { return project.getUndoManagerFor (state); } + Project& project; + ValueTree state; + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (EnabledModuleList) }; diff --git a/extras/Projucer/Source/Project/jucer_Project.cpp b/extras/Projucer/Source/Project/jucer_Project.cpp index 9d760505..24d48f84 100644 --- a/extras/Projucer/Source/Project/jucer_Project.cpp +++ b/extras/Projucer/Source/Project/jucer_Project.cpp @@ -2100,7 +2100,7 @@ void Project::rescanExporterPathModules (bool async) exporterPathsModuleList->scanPaths (getExporterModulePathsToScan (*this)); } -ModuleIDAndFolder Project::getModuleWithID (const String& id) +AvailableModuleList::ModuleIDAndFolder Project::getModuleWithID (const String& id) { if (! getEnabledModules().shouldUseGlobalPath (id)) { diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h index 02e4b223..515c50ee 100644 --- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h +++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h @@ -37,7 +37,7 @@ protected: public: MakeBuildConfiguration (Project& p, const ValueTree& settings, const ProjectExporter& e) : BuildConfiguration (p, settings, e), - architectureTypeValue (config, Ids::linuxArchitecture, getUndoManager(), "-march=native") + architectureTypeValue (config, Ids::linuxArchitecture, getUndoManager(), String()) { linkTimeOptimisationValue.setDefault (false); optimisationLevelValue.setDefault (isDebug() ? gccO0 : gccO3); diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h index 1331222d..a9c9cde9 100644 --- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h +++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h @@ -2152,7 +2152,8 @@ private: void addFilesAndGroupsToProject (StringArray& topLevelGroupIDs) const { for (auto* target : targets) - addEntitlementsFile (*target); + if (target->shouldAddEntitlements()) + addEntitlementsFile (*target); for (auto& group : getAllGroups()) { @@ -3186,29 +3187,26 @@ private: void addEntitlementsFile (XcodeTarget& target) const { - auto entitlements = getEntitlements (target); + String content = + "\n" + "\n" + "\n" + "\n"; - if (entitlements.size() > 0) - { - String content = - "\n" - "\n" - "\n" - "\n"; + auto entitlements = getEntitlements (target); - for (auto& key : entitlements.getAllKeys()) - content += "\t" + key + "\n" - "\t" + entitlements[key] + "\n"; + for (auto& key : entitlements.getAllKeys()) + content += "\t" + key + "\n" + "\t" + entitlements[key] + "\n"; - content += "\n" - "\n"; + content += "\n" + "\n"; - auto entitlementsFile = getTargetFolder().getChildFile (target.getEntitlementsFilename()); - overwriteFileIfDifferentOrThrow (entitlementsFile, content); + auto entitlementsFile = getTargetFolder().getChildFile (target.getEntitlementsFilename()); + overwriteFileIfDifferentOrThrow (entitlementsFile, content); - RelativePath entitlementsPath (entitlementsFile, getTargetFolder(), RelativePath::buildTargetFolder); - addFile (entitlementsPath, false, false, false, false, nullptr, {}); - } + RelativePath entitlementsPath (entitlementsFile, getTargetFolder(), RelativePath::buildTargetFolder); + addFile (entitlementsPath, false, false, false, false, nullptr, {}); } String addProjectItem (const Project::Item& projectItem) const diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp index c90cd2d3..4274dd6c 100644 --- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp +++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp @@ -617,7 +617,7 @@ TargetOS::OS ProjectExporter::getTargetOSForExporter() const RelativePath ProjectExporter::getModuleFolderRelativeToProject (const String& moduleID) const { - if (project.getEnabledModules().shouldCopyModuleFilesLocally (moduleID).getValue()) + if (project.getEnabledModules().shouldCopyModuleFilesLocally (moduleID)) return RelativePath (project.getRelativePathForFile (project.getLocalModuleFolder (moduleID)), RelativePath::projectFolder); @@ -636,7 +636,7 @@ String ProjectExporter::getLegacyModulePath() const RelativePath ProjectExporter::getLegacyModulePath (const String& moduleID) const { - if (project.getEnabledModules().state.getChildWithProperty (Ids::ID, moduleID) ["useLocalCopy"]) + if (project.getEnabledModules().shouldCopyModuleFilesLocally (moduleID)) return RelativePath (project.getRelativePathForFile (project.getGeneratedCodeFolder() .getChildFile ("modules") .getChildFile (moduleID)), RelativePath::projectFolder); diff --git a/extras/Projucer/Source/Utility/Helpers/jucer_MiscUtilities.cpp b/extras/Projucer/Source/Utility/Helpers/jucer_MiscUtilities.cpp index c8879ca9..a9bb75fa 100644 --- a/extras/Projucer/Source/Utility/Helpers/jucer_MiscUtilities.cpp +++ b/extras/Projucer/Source/Utility/Helpers/jucer_MiscUtilities.cpp @@ -411,6 +411,16 @@ bool isValidJUCEExamplesDirectory (const File& directory) noexcept return directory.getChildFile ("Assets").getChildFile ("juce_icon.png").existsAsFile(); } +bool isJUCEFolder (const File& f) +{ + return isJUCEModulesFolder (f.getChildFile ("modules")); +} + +bool isJUCEModulesFolder (const File& f) +{ + return f.isDirectory() && f.getChildFile ("juce_core").isDirectory(); +} + //============================================================================== static var parseJUCEHeaderMetadata (const StringArray& lines) { diff --git a/extras/Projucer/Source/Utility/Helpers/jucer_MiscUtilities.h b/extras/Projucer/Source/Utility/Helpers/jucer_MiscUtilities.h index f96b5ce1..db6742da 100644 --- a/extras/Projucer/Source/Utility/Helpers/jucer_MiscUtilities.h +++ b/extras/Projucer/Source/Utility/Helpers/jucer_MiscUtilities.h @@ -73,6 +73,9 @@ bool isPIPFile (const File&) noexcept; bool isValidJUCEExamplesDirectory (const File&) noexcept; +bool isJUCEModulesFolder (const File&); +bool isJUCEFolder (const File&); + //============================================================================== int indexOfLineStartingWith (const StringArray& lines, const String& text, int startIndex); diff --git a/extras/Projucer/Source/Utility/UI/PropertyComponents/jucer_FilePathPropertyComponent.h b/extras/Projucer/Source/Utility/UI/PropertyComponents/jucer_FilePathPropertyComponent.h index bda4a63a..7acd7ae4 100644 --- a/extras/Projucer/Source/Utility/UI/PropertyComponents/jucer_FilePathPropertyComponent.h +++ b/extras/Projucer/Source/Utility/UI/PropertyComponents/jucer_FilePathPropertyComponent.h @@ -87,7 +87,6 @@ public: void filesDropped (const StringArray& selectedFiles, int, int) override { - setTo (selectedFiles[0]); highlightForDragAndDrop = false; diff --git a/extras/UnitTestRunner/Builds/LinuxMakefile/Makefile b/extras/UnitTestRunner/Builds/LinuxMakefile/Makefile index 7030e0c7..091f7798 100644 --- a/extras/UnitTestRunner/Builds/LinuxMakefile/Makefile +++ b/extras/UnitTestRunner/Builds/LinuxMakefile/Makefile @@ -32,7 +32,7 @@ ifeq ($(CONFIG),Debug) JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) - TARGET_ARCH := -march=native + TARGET_ARCH := endif JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) @@ -53,7 +53,7 @@ ifeq ($(CONFIG),Release) JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) - TARGET_ARCH := -march=native + TARGET_ARCH := endif JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) diff --git a/extras/UnitTestRunner/JuceLibraryCode/AppConfig.h b/extras/UnitTestRunner/JuceLibraryCode/AppConfig.h index 87396c71..db8b0ac3 100644 --- a/extras/UnitTestRunner/JuceLibraryCode/AppConfig.h +++ b/extras/UnitTestRunner/JuceLibraryCode/AppConfig.h @@ -47,7 +47,7 @@ #define JUCE_USE_DARK_SPLASH_SCREEN 1 -#define JUCE_PROJUCER_VERSION 0x50406 +#define JUCE_PROJUCER_VERSION 0x50407 //============================================================================== #define JUCE_MODULE_AVAILABLE_juce_analytics 1 diff --git a/extras/UnitTestRunner/UnitTestRunner.jucer b/extras/UnitTestRunner/UnitTestRunner.jucer index d0f8dcb2..4e3f3afc 100644 --- a/extras/UnitTestRunner/UnitTestRunner.jucer +++ b/extras/UnitTestRunner/UnitTestRunner.jucer @@ -1,7 +1,7 @@ diff --git a/extras/WindowsDLL/JuceLibraryCode/AppConfig.h b/extras/WindowsDLL/JuceLibraryCode/AppConfig.h index 5a607cdb..fee59eb7 100644 --- a/extras/WindowsDLL/JuceLibraryCode/AppConfig.h +++ b/extras/WindowsDLL/JuceLibraryCode/AppConfig.h @@ -47,7 +47,7 @@ #define JUCE_USE_DARK_SPLASH_SCREEN 1 -#define JUCE_PROJUCER_VERSION 0x50406 +#define JUCE_PROJUCER_VERSION 0x50407 //============================================================================== #define JUCE_MODULE_AVAILABLE_juce_audio_basics 1 diff --git a/extras/WindowsDLL/WindowsDLL.jucer b/extras/WindowsDLL/WindowsDLL.jucer index 6eda8d9f..228a9bc6 100644 --- a/extras/WindowsDLL/WindowsDLL.jucer +++ b/extras/WindowsDLL/WindowsDLL.jucer @@ -1,7 +1,7 @@ diff --git a/modules/juce_analytics/juce_analytics.h b/modules/juce_analytics/juce_analytics.h index aef59e71..36828075 100644 --- a/modules/juce_analytics/juce_analytics.h +++ b/modules/juce_analytics/juce_analytics.h @@ -36,7 +36,7 @@ ID: juce_analytics vendor: juce - version: 5.4.6 + version: 5.4.7 name: JUCE analytics classes description: Classes to collect analytics and send to destinations website: http://www.juce.com/juce diff --git a/modules/juce_audio_basics/juce_audio_basics.h b/modules/juce_audio_basics/juce_audio_basics.h index 53556a41..93fd4c65 100644 --- a/modules/juce_audio_basics/juce_audio_basics.h +++ b/modules/juce_audio_basics/juce_audio_basics.h @@ -32,7 +32,7 @@ ID: juce_audio_basics vendor: juce - version: 5.4.6 + version: 5.4.7 name: JUCE audio and MIDI data classes description: Classes for audio buffer manipulation, midi message handling, synthesis, etc. website: http://www.juce.com/juce diff --git a/modules/juce_audio_devices/juce_audio_devices.h b/modules/juce_audio_devices/juce_audio_devices.h index c39ab0f5..1209d3c8 100644 --- a/modules/juce_audio_devices/juce_audio_devices.h +++ b/modules/juce_audio_devices/juce_audio_devices.h @@ -32,7 +32,7 @@ ID: juce_audio_devices vendor: juce - version: 5.4.6 + version: 5.4.7 name: JUCE audio and MIDI I/O device classes description: Classes to play and record from audio and MIDI I/O devices website: http://www.juce.com/juce diff --git a/modules/juce_audio_devices/native/juce_win32_DirectSound.cpp b/modules/juce_audio_devices/native/juce_win32_DirectSound.cpp index 34f30d7b..fb6e97f0 100644 --- a/modules/juce_audio_devices/native/juce_win32_DirectSound.cpp +++ b/modules/juce_audio_devices/native/juce_win32_DirectSound.cpp @@ -514,7 +514,6 @@ private: IDirectSoundBuffer* pOutputBuffer; DWORD writeOffset; int totalBytesPerBuffer, bytesPerBuffer; - unsigned int lastPlayCursor; bool firstPlayTime; int64 lastPlayTime, ticksPerBuffer; @@ -1215,13 +1214,13 @@ public: initialiseDSoundFunctions(); } - void scanForDevices() + void scanForDevices() override { hasScanned = true; deviceList.scan(); } - StringArray getDeviceNames (bool wantInputNames) const + StringArray getDeviceNames (bool wantInputNames) const override { jassert (hasScanned); // need to call scanForDevices() before doing this @@ -1229,13 +1228,13 @@ public: : deviceList.outputDeviceNames; } - int getDefaultDeviceIndex (bool /*forInput*/) const + int getDefaultDeviceIndex (bool /*forInput*/) const override { jassert (hasScanned); // need to call scanForDevices() before doing this return 0; } - int getIndexOfDevice (AudioIODevice* device, bool asInput) const + int getIndexOfDevice (AudioIODevice* device, bool asInput) const override { jassert (hasScanned); // need to call scanForDevices() before doing this @@ -1246,10 +1245,10 @@ public: return -1; } - bool hasSeparateInputsAndOutputs() const { return true; } + bool hasSeparateInputsAndOutputs() const override { return true; } AudioIODevice* createDevice (const String& outputDeviceName, - const String& inputDeviceName) + const String& inputDeviceName) override { jassert (hasScanned); // need to call scanForDevices() before doing this diff --git a/modules/juce_audio_devices/native/juce_win32_WASAPI.cpp b/modules/juce_audio_devices/native/juce_win32_WASAPI.cpp index 3ac6f36e..d7de74c4 100644 --- a/modules/juce_audio_devices/native/juce_win32_WASAPI.cpp +++ b/modules/juce_audio_devices/native/juce_win32_WASAPI.cpp @@ -1445,7 +1445,7 @@ public: } //============================================================================== - void scanForDevices() + void scanForDevices() override { hasScanned = true; @@ -1458,7 +1458,7 @@ public: outputDeviceIds, inputDeviceIds); } - StringArray getDeviceNames (bool wantInputNames) const + StringArray getDeviceNames (bool wantInputNames) const override { jassert (hasScanned); // need to call scanForDevices() before doing this @@ -1466,13 +1466,13 @@ public: : outputDeviceNames; } - int getDefaultDeviceIndex (bool /*forInput*/) const + int getDefaultDeviceIndex (bool /*forInput*/) const override { jassert (hasScanned); // need to call scanForDevices() before doing this return 0; } - int getIndexOfDevice (AudioIODevice* device, bool asInput) const + int getIndexOfDevice (AudioIODevice* device, bool asInput) const override { jassert (hasScanned); // need to call scanForDevices() before doing this @@ -1483,10 +1483,10 @@ public: return -1; } - bool hasSeparateInputsAndOutputs() const { return true; } + bool hasSeparateInputsAndOutputs() const override { return true; } AudioIODevice* createDevice (const String& outputDeviceName, - const String& inputDeviceName) + const String& inputDeviceName) override { jassert (hasScanned); // need to call scanForDevices() before doing this diff --git a/modules/juce_audio_formats/juce_audio_formats.h b/modules/juce_audio_formats/juce_audio_formats.h index 54b30763..1247742b 100644 --- a/modules/juce_audio_formats/juce_audio_formats.h +++ b/modules/juce_audio_formats/juce_audio_formats.h @@ -36,7 +36,7 @@ ID: juce_audio_formats vendor: juce - version: 5.4.6 + version: 5.4.7 name: JUCE audio file format codecs description: Classes for reading and writing various audio file formats. website: http://www.juce.com/juce diff --git a/modules/juce_audio_plugin_client/Unity/juce_UnityPluginInterface.h b/modules/juce_audio_plugin_client/Unity/juce_UnityPluginInterface.h index 5cfe674e..a86daeee 100644 --- a/modules/juce_audio_plugin_client/Unity/juce_UnityPluginInterface.h +++ b/modules/juce_audio_plugin_client/Unity/juce_UnityPluginInterface.h @@ -30,7 +30,7 @@ //============================================================================== #define UNITY_AUDIO_PLUGIN_API_VERSION 0x010401 -#if JUCE_WINDOWS +#if JUCE_MSVC #define UNITY_INTERFACE_API __stdcall #define UNITY_INTERFACE_EXPORT __declspec(dllexport) #else diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp index 879c9066..7f63093c 100644 --- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp @@ -835,17 +835,16 @@ public: void audioProcessorChanged (AudioProcessor*) override { vstEffect.initialDelay = processor->getLatencySamples(); - - if (hostCallback != nullptr) - hostCallback (&vstEffect, Vst2::audioMasterUpdateDisplay, 0, 0, nullptr, 0); - triggerAsyncUpdate(); } void handleAsyncUpdate() override { if (hostCallback != nullptr) - hostCallback (&vstEffect, Vst2::audioMasterIOChanged, 0, 0, nullptr, 0); + { + hostCallback (&vstEffect, Vst2::audioMasterUpdateDisplay, 0, 0, nullptr, 0); + hostCallback (&vstEffect, Vst2::audioMasterIOChanged, 0, 0, nullptr, 0); + } } bool getPinProperties (Vst2::VstPinProperties& properties, bool direction, int index) const diff --git a/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp b/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp index 0947eb5f..e0aca972 100644 --- a/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp @@ -3175,7 +3175,7 @@ JUCE_EXPORTED_FUNCTION IPluginFactory* PLUGIN_API GetPluginFactory() { PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST3; - #if JUCE_WINDOWS + #if JUCE_MSVC // Cunning trick to force this function to be exported. Life's too short to // faff around creating .def files for this kind of thing. #pragma comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__) diff --git a/modules/juce_audio_plugin_client/juce_audio_plugin_client.h b/modules/juce_audio_plugin_client/juce_audio_plugin_client.h index 95b70c23..5fce55a8 100644 --- a/modules/juce_audio_plugin_client/juce_audio_plugin_client.h +++ b/modules/juce_audio_plugin_client/juce_audio_plugin_client.h @@ -36,7 +36,7 @@ ID: juce_audio_plugin_client vendor: juce - version: 5.4.6 + version: 5.4.7 name: JUCE audio plugin wrapper classes description: Classes for building VST, VST3, AudioUnit, AAX and RTAS plugins. website: http://www.juce.com/juce diff --git a/modules/juce_audio_plugin_client/utility/juce_IncludeSystemHeaders.h b/modules/juce_audio_plugin_client/utility/juce_IncludeSystemHeaders.h index da0c178a..2c0f1298 100644 --- a/modules/juce_audio_plugin_client/utility/juce_IncludeSystemHeaders.h +++ b/modules/juce_audio_plugin_client/utility/juce_IncludeSystemHeaders.h @@ -31,7 +31,7 @@ #define STRICT 1 #include #include - #if ! JUCE_MINGW + #if JUCE_MSVC #pragma warning (disable : 4312 4355) #endif #ifdef __INTEL_COMPILER diff --git a/modules/juce_audio_processors/juce_audio_processors.h b/modules/juce_audio_processors/juce_audio_processors.h index f2f4c73d..972e60f0 100644 --- a/modules/juce_audio_processors/juce_audio_processors.h +++ b/modules/juce_audio_processors/juce_audio_processors.h @@ -36,7 +36,7 @@ ID: juce_audio_processors vendor: juce - version: 5.4.6 + version: 5.4.7 name: JUCE audio processor classes description: Classes for loading and playing VST, AU, LADSPA, or internally-generated audio processors. website: http://www.juce.com/juce diff --git a/modules/juce_audio_utils/juce_audio_utils.h b/modules/juce_audio_utils/juce_audio_utils.h index 95f06f3a..dd4f08dc 100644 --- a/modules/juce_audio_utils/juce_audio_utils.h +++ b/modules/juce_audio_utils/juce_audio_utils.h @@ -36,7 +36,7 @@ ID: juce_audio_utils vendor: juce - version: 5.4.6 + version: 5.4.7 name: JUCE extra audio utility classes description: Classes for audio-related GUI and miscellaneous tasks. website: http://www.juce.com/juce diff --git a/modules/juce_blocks_basics/juce_blocks_basics.h b/modules/juce_blocks_basics/juce_blocks_basics.h index 41035250..2e58ee53 100644 --- a/modules/juce_blocks_basics/juce_blocks_basics.h +++ b/modules/juce_blocks_basics/juce_blocks_basics.h @@ -32,7 +32,7 @@ ID: juce_blocks_basics vendor: juce - version: 5.4.6 + version: 5.4.7 name: Provides low-level control over ROLI BLOCKS devices description: JUCE wrapper for low-level control over ROLI BLOCKS devices. website: http://developer.roli.com diff --git a/modules/juce_box2d/juce_box2d.h b/modules/juce_box2d/juce_box2d.h index f4310a6d..05c21533 100644 --- a/modules/juce_box2d/juce_box2d.h +++ b/modules/juce_box2d/juce_box2d.h @@ -36,7 +36,7 @@ ID: juce_box2d vendor: juce - version: 5.4.6 + version: 5.4.7 name: JUCE wrapper for the Box2D physics engine description: The Box2D physics engine and some utility classes. website: http://www.juce.com/juce diff --git a/modules/juce_core/juce_core.cpp b/modules/juce_core/juce_core.cpp index 1c58ba77..a6a2ef76 100644 --- a/modules/juce_core/juce_core.cpp +++ b/modules/juce_core/juce_core.cpp @@ -48,7 +48,11 @@ #if JUCE_WINDOWS #include - #if ! JUCE_MINGW + #if JUCE_MINGW + #include + #include + #include + #else #pragma warning (push) #pragma warning (disable: 4091) #include @@ -59,12 +63,6 @@ #endif #endif - #if JUCE_MINGW - #include - #include - #include - #endif - #else #if JUCE_LINUX || JUCE_ANDROID #include diff --git a/modules/juce_core/juce_core.h b/modules/juce_core/juce_core.h index 3a88ff18..62d0dfa4 100644 --- a/modules/juce_core/juce_core.h +++ b/modules/juce_core/juce_core.h @@ -32,7 +32,7 @@ ID: juce_core vendor: juce - version: 5.4.6 + version: 5.4.7 name: JUCE core classes description: The essential set of basic JUCE classes, as required by all the other JUCE modules. Includes text, container, memory, threading and i/o functionality. website: http://www.juce.com/juce @@ -107,7 +107,7 @@ //============================================================================== /** Config: JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES - In a Visual C++ build, this can be used to stop the required system libs being + In a Windows build, this can be used to stop the required system libs being automatically added to the link stage. */ #ifndef JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES diff --git a/modules/juce_core/native/juce_BasicNativeHeaders.h b/modules/juce_core/native/juce_BasicNativeHeaders.h index f9281e1f..9ec827f2 100644 --- a/modules/juce_core/native/juce_BasicNativeHeaders.h +++ b/modules/juce_core/native/juce_BasicNativeHeaders.h @@ -176,7 +176,7 @@ #pragma warning (4: 4511 4512 4100) #endif - #if JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES + #if ! JUCE_MINGW && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES #pragma comment (lib, "kernel32.lib") #pragma comment (lib, "user32.lib") #pragma comment (lib, "wininet.lib") diff --git a/modules/juce_core/native/juce_win32_SystemStats.cpp b/modules/juce_core/native/juce_win32_SystemStats.cpp index 5c74c207..bbdd2586 100644 --- a/modules/juce_core/native/juce_win32_SystemStats.cpp +++ b/modules/juce_core/native/juce_win32_SystemStats.cpp @@ -23,7 +23,7 @@ namespace juce { -#if ! JUCE_MINGW +#if JUCE_MSVC #pragma intrinsic (__cpuid) #pragma intrinsic (__rdtsc) #endif @@ -41,7 +41,7 @@ void Logger::outputDebugString (const String& text) //============================================================================== -#if JUCE_MINGW +#if JUCE_MINGW || JUCE_CLANG static void callCPUID (int result[4], uint32 type) { uint32 la = result[0], lb = result[1], lc = result[2], ld = result[3]; diff --git a/modules/juce_core/system/juce_StandardHeader.h b/modules/juce_core/system/juce_StandardHeader.h index 68c81a03..81490854 100644 --- a/modules/juce_core/system/juce_StandardHeader.h +++ b/modules/juce_core/system/juce_StandardHeader.h @@ -29,7 +29,7 @@ */ #define JUCE_MAJOR_VERSION 5 #define JUCE_MINOR_VERSION 4 -#define JUCE_BUILDNUMBER 6 +#define JUCE_BUILDNUMBER 7 /** Current JUCE version number. diff --git a/modules/juce_cryptography/juce_cryptography.h b/modules/juce_cryptography/juce_cryptography.h index 3ecee082..f27c8369 100644 --- a/modules/juce_cryptography/juce_cryptography.h +++ b/modules/juce_cryptography/juce_cryptography.h @@ -36,7 +36,7 @@ ID: juce_cryptography vendor: juce - version: 5.4.6 + version: 5.4.7 name: JUCE cryptography classes description: Classes for various basic cryptography functions, including RSA, Blowfish, MD5, SHA, etc. website: http://www.juce.com/juce diff --git a/modules/juce_data_structures/juce_data_structures.h b/modules/juce_data_structures/juce_data_structures.h index e838b11e..1def8be2 100644 --- a/modules/juce_data_structures/juce_data_structures.h +++ b/modules/juce_data_structures/juce_data_structures.h @@ -36,7 +36,7 @@ ID: juce_data_structures vendor: juce - version: 5.4.6 + version: 5.4.7 name: JUCE data model helper classes description: Classes for undo/redo management, and smart data structures. website: http://www.juce.com/juce diff --git a/modules/juce_dsp/juce_dsp.h b/modules/juce_dsp/juce_dsp.h index 515fc153..84f68c96 100644 --- a/modules/juce_dsp/juce_dsp.h +++ b/modules/juce_dsp/juce_dsp.h @@ -36,7 +36,7 @@ ID: juce_dsp vendor: juce - version: 5.4.6 + version: 5.4.7 name: JUCE DSP classes description: Classes for audio buffer manipulation, digital audio processing, filtering, oversampling, fast math functions etc. website: http://www.juce.com/juce diff --git a/modules/juce_events/juce_events.h b/modules/juce_events/juce_events.h index 316d90b6..07b3ef54 100644 --- a/modules/juce_events/juce_events.h +++ b/modules/juce_events/juce_events.h @@ -32,7 +32,7 @@ ID: juce_events vendor: juce - version: 5.4.6 + version: 5.4.7 name: JUCE message and event handling classes description: Classes for running an application's main event loop and sending/receiving messages, timers, etc. website: http://www.juce.com/juce diff --git a/modules/juce_graphics/juce_graphics.h b/modules/juce_graphics/juce_graphics.h index 39d8ca46..054be147 100644 --- a/modules/juce_graphics/juce_graphics.h +++ b/modules/juce_graphics/juce_graphics.h @@ -36,7 +36,7 @@ ID: juce_graphics vendor: juce - version: 5.4.6 + version: 5.4.7 name: JUCE graphics classes description: Classes for 2D vector graphics, image loading/saving, font handling, etc. website: http://www.juce.com/juce diff --git a/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm b/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm index 3f87574e..cfc23932 100644 --- a/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm +++ b/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm @@ -60,11 +60,7 @@ public: CGColorSpaceRelease (colourSpace); } - ~CoreGraphicsPixelData() override - { - freeCachedImageRef(); - CGContextRelease (context); - } + ~CoreGraphicsPixelData() override; std::unique_ptr createLowLevelContext() override { @@ -189,6 +185,14 @@ private: JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CoreGraphicsPixelData) }; +// The following implementation is outside of the class definition to avoid spurious +// warning messages when dynamically loading libraries at runtime on macOS +CoreGraphicsPixelData::~CoreGraphicsPixelData() +{ + freeCachedImageRef(); + CGContextRelease (context); +} + ImagePixelData::Ptr NativeImageType::create (Image::PixelFormat format, int width, int height, bool clearImage) const { return *new CoreGraphicsPixelData (format == Image::RGB ? Image::ARGB : format, width, height, clearImage); diff --git a/modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp b/modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp index 6e8facbc..cc2b4f8a 100644 --- a/modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp +++ b/modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp @@ -48,13 +48,13 @@ namespace DirectWriteTypeLayout return ComBaseClassHelper::QueryInterface (refId, result); } - JUCE_COMRESULT IsPixelSnappingDisabled (void* /*clientDrawingContext*/, BOOL* isDisabled) override + JUCE_COMRESULT IsPixelSnappingDisabled (void* /*clientDrawingContext*/, BOOL* isDisabled) noexcept override { *isDisabled = FALSE; return S_OK; } - JUCE_COMRESULT GetCurrentTransform (void*, DWRITE_MATRIX* matrix) override + JUCE_COMRESULT GetCurrentTransform (void*, DWRITE_MATRIX* matrix) noexcept override { matrix->m11 = 1.0f; matrix->m12 = 0.0f; matrix->m21 = 0.0f; matrix->m22 = 1.0f; @@ -62,30 +62,30 @@ namespace DirectWriteTypeLayout return S_OK; } - JUCE_COMRESULT GetPixelsPerDip (void*, FLOAT* pixelsPerDip) override + JUCE_COMRESULT GetPixelsPerDip (void*, FLOAT* pixelsPerDip) noexcept override { *pixelsPerDip = 1.0f; return S_OK; } - JUCE_COMRESULT DrawUnderline (void*, FLOAT, FLOAT, DWRITE_UNDERLINE const*, IUnknown*) override + JUCE_COMRESULT DrawUnderline (void*, FLOAT, FLOAT, DWRITE_UNDERLINE const*, IUnknown*) noexcept override { return E_NOTIMPL; } - JUCE_COMRESULT DrawStrikethrough (void*, FLOAT, FLOAT, DWRITE_STRIKETHROUGH const*, IUnknown*) override + JUCE_COMRESULT DrawStrikethrough (void*, FLOAT, FLOAT, DWRITE_STRIKETHROUGH const*, IUnknown*) noexcept override { return E_NOTIMPL; } - JUCE_COMRESULT DrawInlineObject (void*, FLOAT, FLOAT, IDWriteInlineObject*, BOOL, BOOL, IUnknown*) override + JUCE_COMRESULT DrawInlineObject (void*, FLOAT, FLOAT, IDWriteInlineObject*, BOOL, BOOL, IUnknown*) noexcept override { return E_NOTIMPL; } JUCE_COMRESULT DrawGlyphRun (void* clientDrawingContext, FLOAT baselineOriginX, FLOAT baselineOriginY, DWRITE_MEASURING_MODE, DWRITE_GLYPH_RUN const* glyphRun, DWRITE_GLYPH_RUN_DESCRIPTION const* runDescription, - IUnknown* clientDrawingEffect) override + IUnknown* clientDrawingEffect) noexcept override { auto layout = static_cast (clientDrawingContext); @@ -207,7 +207,7 @@ namespace DirectWriteTypeLayout DWRITE_FONT_METRICS dwFontMetrics; dwFontFace->GetMetrics (&dwFontMetrics); - const float totalHeight = (float) (std::abs (dwFontMetrics.ascent) + std::abs (dwFontMetrics.descent)); + const float totalHeight = (float) (dwFontMetrics.ascent + dwFontMetrics.descent); return dwFontMetrics.designUnitsPerEm / totalHeight; } diff --git a/modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp b/modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp index b4d53b44..7ffea03a 100644 --- a/modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp +++ b/modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp @@ -285,7 +285,7 @@ private: { PathGeometrySink() : ComBaseClassHelper (0) {} - void __stdcall AddBeziers (const D2D1_BEZIER_SEGMENT* beziers, UINT beziersCount) override + void __stdcall AddBeziers (const D2D1_BEZIER_SEGMENT* beziers, UINT beziersCount) noexcept override { for (UINT i = 0; i < beziersCount; ++i) path.cubicTo (convertPoint (beziers[i].point1), @@ -293,30 +293,30 @@ private: convertPoint (beziers[i].point3)); } - void __stdcall AddLines (const D2D1_POINT_2F* points, UINT pointsCount) override + void __stdcall AddLines (const D2D1_POINT_2F* points, UINT pointsCount) noexcept override { for (UINT i = 0; i < pointsCount; ++i) path.lineTo (convertPoint (points[i])); } - void __stdcall BeginFigure (D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN) override + void __stdcall BeginFigure (D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN) noexcept override { path.startNewSubPath (convertPoint (startPoint)); } - void __stdcall EndFigure (D2D1_FIGURE_END figureEnd) override + void __stdcall EndFigure (D2D1_FIGURE_END figureEnd) noexcept override { if (figureEnd == D2D1_FIGURE_END_CLOSED) path.closeSubPath(); } - void __stdcall SetFillMode (D2D1_FILL_MODE fillMode) override + void __stdcall SetFillMode (D2D1_FILL_MODE fillMode) noexcept override { path.setUsingNonZeroWinding (fillMode == D2D1_FILL_MODE_WINDING); } - void __stdcall SetSegmentFlags (D2D1_PATH_SEGMENT) override {} - JUCE_COMRESULT Close() override { return S_OK; } + void __stdcall SetSegmentFlags (D2D1_PATH_SEGMENT) noexcept override {} + JUCE_COMRESULT Close() noexcept override { return S_OK; } Path path; diff --git a/modules/juce_gui_basics/juce_gui_basics.cpp b/modules/juce_gui_basics/juce_gui_basics.cpp index 478dd37f..9143cec5 100644 --- a/modules/juce_gui_basics/juce_gui_basics.cpp +++ b/modules/juce_gui_basics/juce_gui_basics.cpp @@ -71,25 +71,21 @@ #include #endif - #if JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES + #if JUCE_MINGW + #include + #elif ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES #pragma comment(lib, "vfw32.lib") #pragma comment(lib, "imm32.lib") - #endif - #if JUCE_OPENGL - #if JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES + #if JUCE_OPENGL #pragma comment(lib, "OpenGL32.Lib") #pragma comment(lib, "GlU32.Lib") #endif - #endif - #if JUCE_DIRECT2D && JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES - #pragma comment (lib, "Dwrite.lib") - #pragma comment (lib, "D2d1.lib") - #endif - - #if JUCE_MINGW - #include + #if JUCE_DIRECT2D + #pragma comment (lib, "Dwrite.lib") + #pragma comment (lib, "D2d1.lib") + #endif #endif //============================================================================== diff --git a/modules/juce_gui_basics/juce_gui_basics.h b/modules/juce_gui_basics/juce_gui_basics.h index 304cf049..dbe42b28 100644 --- a/modules/juce_gui_basics/juce_gui_basics.h +++ b/modules/juce_gui_basics/juce_gui_basics.h @@ -36,7 +36,7 @@ ID: juce_gui_basics vendor: juce - version: 5.4.6 + version: 5.4.7 name: JUCE GUI core classes description: Basic user-interface components and related classes. website: http://www.juce.com/juce diff --git a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm index 4f7c30c9..1f89d788 100644 --- a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm +++ b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm @@ -997,7 +997,7 @@ public: } //============================================================================== - bool sendModalInputAttemptIfBlocked() + bool isBlockedByModalComponent() { if (auto* modal = Component::getCurrentlyModalComponent()) { @@ -1005,7 +1005,6 @@ public: && (! getComponent().isParentOf (modal)) && getComponent().isCurrentlyBlockedByAnotherModalComponent()) { - modal->inputAttemptWhenModal(); return true; } } @@ -1013,6 +1012,13 @@ public: return false; } + void sendModalInputAttemptIfBlocked() + { + if (isBlockedByModalComponent()) + if (auto* modal = Component::getCurrentlyModalComponent()) + modal->inputAttemptWhenModal(); + } + bool canBecomeKeyWindow() { return component.isVisible() && (getStyleFlags() & juce::ComponentPeer::windowIgnoresKeyPresses) == 0; @@ -1881,15 +1887,9 @@ private: static BOOL becomeFirstResponder (id self, SEL) { if (auto* owner = getOwner (self)) - { - if (owner->canBecomeKeyWindow()) - { - owner->viewFocusGain(); - return YES; - } - } + owner->viewFocusGain(); - return NO; + return YES; } static BOOL resignFirstResponder (id self, SEL) @@ -1988,7 +1988,7 @@ private: return owner != nullptr && owner->canBecomeKeyWindow() - && ! owner->sendModalInputAttemptIfBlocked(); + && ! owner->isBlockedByModalComponent(); } static BOOL canBecomeMainWindow (id self, SEL) @@ -1997,7 +1997,7 @@ private: return owner != nullptr && owner->canBecomeMainWindow() - && ! owner->sendModalInputAttemptIfBlocked(); + && ! owner->isBlockedByModalComponent(); } static void becomeKeyWindow (id self, SEL) diff --git a/modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp b/modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp index 46d07789..1b0ff1e6 100644 --- a/modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp +++ b/modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp @@ -125,8 +125,8 @@ namespace DragAndDropHelpers class JuceDataObject : public ComBaseClassHelper { public: - JuceDataObject (JuceDropSource* s, const FORMATETC* f, const STGMEDIUM* m) - : dropSource (s), format (f), medium (m) + JuceDataObject (const FORMATETC* f, const STGMEDIUM* m) + : format (f), medium (m) { } @@ -203,7 +203,6 @@ namespace DragAndDropHelpers JUCE_COMRESULT EnumDAdvise (IEnumSTATDATA**) { return OLE_E_ADVISENOTSUPPORTED; } private: - JuceDropSource* const dropSource; const FORMATETC* const format; const STGMEDIUM* const medium; @@ -255,7 +254,7 @@ namespace DragAndDropHelpers OleInitialize (0); auto source = new JuceDropSource(); - auto data = new JuceDataObject (source, &format, &medium); + auto data = new JuceDataObject (&format, &medium); DWORD effect; DoDragDrop (data, source, whatToDo, &effect); diff --git a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp index b9c217e8..80f15564 100644 --- a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp +++ b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp @@ -2241,7 +2241,7 @@ private: } } - void setIcon (const Image& newIcon) + void setIcon (const Image& newIcon) override { if (auto hicon = IconConverters::createHICONFromImage (newIcon, TRUE, 0, 0)) { diff --git a/modules/juce_gui_basics/widgets/juce_ListBox.cpp b/modules/juce_gui_basics/widgets/juce_ListBox.cpp index 75c4545d..7d7a9833 100644 --- a/modules/juce_gui_basics/widgets/juce_ListBox.cpp +++ b/modules/juce_gui_basics/widgets/juce_ListBox.cpp @@ -723,7 +723,7 @@ bool ListBox::keyPressed (const KeyPress& key) if (multiple) selectRangeOfRows (lastRowSelected, lastRowSelected + 1); else - selectRow (jmin (totalItems - 1, jmax (0, lastRowSelected) + 1)); + selectRow (jmin (totalItems - 1, jmax (0, lastRowSelected + 1))); } else if (key.isKeyCode (KeyPress::pageUpKey)) { diff --git a/modules/juce_gui_extra/juce_gui_extra.h b/modules/juce_gui_extra/juce_gui_extra.h index 705bff90..7aaf5555 100644 --- a/modules/juce_gui_extra/juce_gui_extra.h +++ b/modules/juce_gui_extra/juce_gui_extra.h @@ -36,7 +36,7 @@ ID: juce_gui_extra vendor: juce - version: 5.4.6 + version: 5.4.7 name: JUCE extended GUI classes description: Miscellaneous GUI classes for specialised tasks. website: http://www.juce.com/juce diff --git a/modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp b/modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp index afdc0b63..8e01c696 100644 --- a/modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp +++ b/modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp @@ -153,12 +153,12 @@ private: { EventHandler (WebBrowserComponent& w) : ComponentMovementWatcher (&w), owner (w) {} - JUCE_COMRESULT GetTypeInfoCount (UINT*) { return E_NOTIMPL; } - JUCE_COMRESULT GetTypeInfo (UINT, LCID, ITypeInfo**) { return E_NOTIMPL; } - JUCE_COMRESULT GetIDsOfNames (REFIID, LPOLESTR*, UINT, LCID, DISPID*) { return E_NOTIMPL; } + JUCE_COMRESULT GetTypeInfoCount (UINT*) override { return E_NOTIMPL; } + JUCE_COMRESULT GetTypeInfo (UINT, LCID, ITypeInfo**) override { return E_NOTIMPL; } + JUCE_COMRESULT GetIDsOfNames (REFIID, LPOLESTR*, UINT, LCID, DISPID*) override { return E_NOTIMPL; } JUCE_COMRESULT Invoke (DISPID dispIdMember, REFIID /*riid*/, LCID /*lcid*/, WORD /*wFlags*/, DISPPARAMS* pDispParams, - VARIANT* /*pVarResult*/, EXCEPINFO* /*pExcepInfo*/, UINT* /*puArgErr*/) + VARIANT* /*pVarResult*/, EXCEPINFO* /*pExcepInfo*/, UINT* /*puArgErr*/) override { if (dispIdMember == DISPID_BEFORENAVIGATE2) { diff --git a/modules/juce_opengl/juce_opengl.cpp b/modules/juce_opengl/juce_opengl.cpp index e3e96e8c..b9ad3502 100644 --- a/modules/juce_opengl/juce_opengl.cpp +++ b/modules/juce_opengl/juce_opengl.cpp @@ -48,7 +48,7 @@ #elif JUCE_WINDOWS #include - #if JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES + #if ! JUCE_MINGW && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES #pragma comment(lib, "OpenGL32.Lib") #endif diff --git a/modules/juce_opengl/juce_opengl.h b/modules/juce_opengl/juce_opengl.h index 97e73b1f..f056ceb8 100644 --- a/modules/juce_opengl/juce_opengl.h +++ b/modules/juce_opengl/juce_opengl.h @@ -36,7 +36,7 @@ ID: juce_opengl vendor: juce - version: 5.4.6 + version: 5.4.7 name: JUCE OpenGL classes description: Classes for rendering OpenGL in a JUCE window. website: http://www.juce.com/juce diff --git a/modules/juce_osc/juce_osc.h b/modules/juce_osc/juce_osc.h index a6d75eae..4372e1ec 100644 --- a/modules/juce_osc/juce_osc.h +++ b/modules/juce_osc/juce_osc.h @@ -36,7 +36,7 @@ ID: juce_osc vendor: juce - version: 5.4.6 + version: 5.4.7 name: JUCE OSC classes description: Open Sound Control implementation. website: http://www.juce.com/juce diff --git a/modules/juce_osc/osc/juce_OSCBundle.h b/modules/juce_osc/osc/juce_OSCBundle.h index a569da7a..23ed8d04 100644 --- a/modules/juce_osc/osc/juce_OSCBundle.h +++ b/modules/juce_osc/osc/juce_OSCBundle.h @@ -64,7 +64,7 @@ public: An OSCBundle Element contains either one OSCMessage or one OSCBundle. */ - class Element + class JUCE_API Element { public: //============================================================================== diff --git a/modules/juce_product_unlocking/juce_product_unlocking.h b/modules/juce_product_unlocking/juce_product_unlocking.h index 4cd5270b..9de31516 100644 --- a/modules/juce_product_unlocking/juce_product_unlocking.h +++ b/modules/juce_product_unlocking/juce_product_unlocking.h @@ -36,7 +36,7 @@ ID: juce_product_unlocking vendor: juce - version: 5.4.6 + version: 5.4.7 name: JUCE Online marketplace support description: Classes for online product authentication website: http://www.juce.com/juce diff --git a/modules/juce_product_unlocking/native/javaopt/app/com/roli/juce/JuceBillingClient.java b/modules/juce_product_unlocking/native/javaopt/app/com/roli/juce/JuceBillingClient.java index ad63f5ba..c3e13454 100644 --- a/modules/juce_product_unlocking/native/javaopt/app/com/roli/juce/JuceBillingClient.java +++ b/modules/juce_product_unlocking/native/javaopt/app/com/roli/juce/JuceBillingClient.java @@ -2,7 +2,7 @@ package com.roli.juce; import com.android.billingclient.api.*; -public class JuceBillingClient implements PurchasesUpdatedListener { +public class JuceBillingClient implements PurchasesUpdatedListener, BillingClientStateListener { private native void skuDetailsQueryCallback(long host, java.util.List skuDetails); private native void purchasesListQueryCallback(long host, java.util.List purchases); private native void purchaseCompletedCallback(long host, Purchase purchase, int responseCode); @@ -16,7 +16,7 @@ public class JuceBillingClient implements PurchasesUpdatedListener { .setListener(this) .build(); - billingClient.startConnection(null); + billingClient.startConnection(this); } public void endConnection() { @@ -127,6 +127,18 @@ public class JuceBillingClient implements PurchasesUpdatedListener { } } + @Override + public void onBillingServiceDisconnected() + { + + } + + @Override + public void onBillingSetupFinished(BillingResult billingResult) + { + + } + private void executeOnBillingClientConnection(Runnable runnable) { if (billingClient.isReady()) { runnable.run(); @@ -162,7 +174,12 @@ public class JuceBillingClient implements PurchasesUpdatedListener { @Override public void run() { AcknowledgePurchaseParams acknowledgePurchaseParams = AcknowledgePurchaseParams.newBuilder().setPurchaseToken(purchase.getPurchaseToken()).build(); - billingClient.acknowledgePurchase(acknowledgePurchaseParams, null); + billingClient.acknowledgePurchase(acknowledgePurchaseParams, new AcknowledgePurchaseResponseListener() { + @Override + public void onAcknowledgePurchaseResponse(BillingResult billingResult) { + + } + }); } }); } diff --git a/modules/juce_video/juce_video.cpp b/modules/juce_video/juce_video.cpp index bec17ed2..c3f89fc1 100644 --- a/modules/juce_video/juce_video.cpp +++ b/modules/juce_video/juce_video.cpp @@ -45,24 +45,24 @@ #import //============================================================================== -#elif JUCE_MSVC +#elif JUCE_WINDOWS && ! JUCE_MINGW /* If you're using the camera classes, you'll need access to a few DirectShow headers. These files are provided in the normal Windows SDK. */ #include #include #include - #if JUCE_USE_CAMERA && JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES - #pragma comment (lib, "Strmiids.lib") - #pragma comment (lib, "wmvcore.lib") - #endif + #if ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES + #pragma comment (lib, "strmiids.lib") - #if JUCE_MEDIAFOUNDATION && JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES - #pragma comment (lib, "mfuuid.lib") - #endif + #if JUCE_USE_CAMERA + #pragma comment (lib, "Strmiids.lib") + #pragma comment (lib, "wmvcore.lib") + #endif - #if JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES - #pragma comment (lib, "strmiids.lib") + #if JUCE_MEDIAFOUNDATION + #pragma comment (lib, "mfuuid.lib") + #endif #endif #endif diff --git a/modules/juce_video/juce_video.h b/modules/juce_video/juce_video.h index 499c080a..a8711013 100644 --- a/modules/juce_video/juce_video.h +++ b/modules/juce_video/juce_video.h @@ -36,7 +36,7 @@ ID: juce_video vendor: juce - version: 5.4.6 + version: 5.4.7 name: JUCE video playback and capture classes description: Classes for playing video and capturing camera input. website: http://www.juce.com/juce